Вероятно работающий CAD\CAM пакет https://www.gcad3d.org/ и снова поломка linuxcnc с обновлением чего-то питоновского

Nebulosa
Переменная существует только для конкретной сессии.
нет, скрипт с заданием переменной находится в /etc/profile.d ( /etc/profile.d/linuxcnc.sh) и переменная устанавливается для всех при входе в оболочку

пример неработающего приложения из за неверной переменной в этой же теме
https://archlinux.org.ru/forum/post/260560/
Давайте уже финалить эти хождения по мукам :)

В файле /etc/profile.d/locale.sh есть как раз этот случай:

# define default LANG to C if not already defined
LANG=${LANG:-C}

# export all locale (7) variables when they exist
export LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY \
       LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT \
       LC_IDENTIFICATION

Соответсвенно делаем:

echo "export TCLLIBPATH=\${TCLLIBPATH:=/usr/lib/tcltk/linuxcnc}" > ${pkgname}.sh

И получаем то, что и хотели.
$ cat /etc/profile.d/linuxcnc.sh
export TCLLIBPATH=${TCLLIBPATH:=/usr/lib/tcltk/linuxcnc}

Тащить логику формирования путей (массивом) характерную для MingW в полноценную Linux систему (мы же пакет именно для Арча делаем со своим окружением) считаю неправильной. Если бы это было так, то как минимум в старых пакетах было бы что-то похожее, а не один символ пропущен, там надо кардинально переписывать
vs220
пример неработающего приложения из за неверной переменной в этой же теме
https://archlinux.org.ru/forum/post/260560/

Я не уверен, что там именно проблема в пути, о чём сам автор и написал.
Также вижу попытки прописать нужную переменную, но без результата. Как минимум надо смотреть, что содержится в /etc/profile.d/linuxcnc.sh и перелогинивался ли он после правок этого файла.
Nebulosa
Тащить логику формирования путей (массивом) характерную для MingW в полноценную Linux систему (мы же пакет именно для Арча делаем со своим окружением) считаю неправильной.
Логика должна соответствовать логике используемой библиотеки , для TCL пути в TCLLIBPATH разделяются пробелом.
Вот и вся логика, не надо ничего усложнять а просто исправить неправильно прописанную (из за привычки к bash PATH) строчку в пакбилде.
#строка28
 echo "export TCLLIBPATH=$TCLLIBPATH:/usr/lib/tcltk/linuxcnc" > ${pkgname}.sh
#исправить на
echo "export TCLLIBPATH="$TCLLIBPATH  /usr/lib/tcltk/linuxcnc"" > ${pkgname}.sh

ваше же
export TCLLIBPATH=${TCLLIBPATH:=/usr/lib/tcltk/linuxcnc}
приведет к неработоспособности linuxcnc при наличии другого TCLLIBPATH отличного от /usr/lib/tcltk/linuxcnc
vs220
#строка28
 echo "export TCLLIBPATH=$TCLLIBPATH:/usr/lib/tcltk/linuxcnc" > ${pkgname}.sh
#исправить на
echo "export TCLLIBPATH="$TCLLIBPATH  /usr/lib/tcltk/linuxcnc"" > ${pkgname}.sh
Я опять извиняюсь, но нужны пробелы))

echo "export TCLLIBPATH=\" $TCLLIBPATH  /usr/lib/tcltk/linuxcnc \"" > ${pkgname}.sh

vs220
ваше же
export TCLLIBPATH=${TCLLIBPATH:=/usr/lib/tcltk/linuxcnc}
приведет к неработоспособности linuxcnc при наличии другого TCLLIBPATH отличного от /usr/lib/tcltk/linuxcnc

Описываем ситуацию установки MingW в Арч, какой-то такой исчезающий случай?)

Ваше упорство надо поддержать, сейчас попробую собрать и запустить пакет с вашими правками, посмотрим, что linuxcnc скажет на массив путей.
Nebulosa
Ваше упорство надо поддержать
Мы скатываемся куда то не туда,
Ещё раз ,
TCL не баш и TCLLIBPATH свои правила имеет простые: пути начинаются с / и разделяются пробелами. Лепить туда двоеточие и лишние пробелы так же не надо как и сложные баш конструкции для простого добавления пути через пробел

Затиратирать общесистемные переменные PATH так же плохая практика и общепринято добавлять новые к уже сушествующим в соответствии с синтаксисом библиотек/приложений которые эти переменные используют
vs220
Мы скатываемся куда то не туда
Это точно :)

Провёл натурные эксперименты, результаты получились неожиданные.

Создал файл /etc/profile.d/test.sh:
export TCLLIBPATH="/tmp"
и создал файл /etc/profile.d/linuxcnc.sh:

# export TCLLIBPATH=" $TCLLIBPATH /usr/lib/tcltk/linuxcnc "
# export TCLLIBPATH="( $TCLLIBPATH /usr/lib/tcltk/linuxcnc )"
# export TCLLIBPATH="$TCLLIBPATH /usr/lib/tcltk/linuxcnc"
# export TCLLIBPATH="($TCLLIBPATH /usr/lib/tcltk/linuxcnc)"
# export TCLLIBPATH="${TCLLIBPATH:=/usr/lib/tcltk/linuxcnc}"
# export TCLLIBPATH="$TCLLIBPATH:/usr/lib/tcltk/linuxcnc"
# export TCLLIBPATH="/tmp:/usr/lib/tcltk/linuxcnc"
# export TCLLIBPATH=":/usr/lib/tcltk/linuxcnc"
export TCLLIBPATH="/usr/lib/tcltk/linuxcnc"
В котором раскомментировал по одной строке, чтобы протестировать запуск. Между каждым изменением перелогинивался, чтобы точно менялась переменная окружения.

Сделал файл запускалку, чтобы фиксировать лог запусков:
$ cat test_linuxcnc.sh
#!/bin/bash

echo "test.sh file is:    $(cat /etc/profile.d/test.sh)"
echo "linuxcnc.sh is:     $(grep -v '^#' /etc/profile.d/linuxcnc.sh)"
echo "env TCLLIBPATH is:  $(env | grep TCLLIBPATH)"
echo "Result is:"
echo

Xwayland 2>/dev/null &
DISPLAY=:0 linuxcnc

echo
echo
echo

Ну и проделал все тесты, лог выложен здесь

Итог: linuxcnc не запускается ни в каком случае, кроме чёткого указания TCLLIBPATH=/usr/lib/tcltk/linuxcnc

Картинка которую я получил по итогу (на всякий случай):

На этом, пожалуй, завершу полемику. Данный случай позволил более полно осознать, как работают переменные окружения, есть пара мыслей внедрить новые знания на своих проектах :)
Nebulosa
Итог: linuxcnc не запускается ни в каком случае, кроме чёткого указания TCLLIBPATH=/usr/lib/tcltk/linuxcnc

Это как раз то, о чем я глаголил пару дней тому назад. Это больше, чем факт - "так оно и есть на самом деле".
Nebulosa
Создал файл /etc/profile.d/test.sh:
export TCLLIBPATH="/tmp"
Nebulosa
linuxcnc не запускается
Теперь вы на собственном примере убедились что

vs220
Затиратирать общесистемные переменные PATH так же плохая практика и общепринято добавлять новые к уже сушествующим в соответствии с синтаксисом библиотек/приложений которые эти переменные используют

Скрипты в /etc/profile.d выполняются поочередно и все а не выборочно, а ваш test.sh стирает то что задал /etc/profile.d/linuxcnc.sh так как выполняется последним
и что бы проверить это достаточно просто выполнить команды в них в терминале поочередно и посмотреть результат
echo $TCLLIBPATH
export TCLLIBPATH="$TCLLIBPATH  /usr/lib/tcltk/linuxcnc"
export TCLLIBPATH="/tmp"
echo $TCLLIBPATH

потому еще раз
vs220
Затиратирать общесистемные переменные PATH так же плохая практика и общепринято добавлять новые к уже сушествующим в соответствии с синтаксисом библиотек/приложений которые эти переменные используют

можете проверить работу корректно прописанных скриптов для задания TCLLIBPATH
#cat /etc/profile.d/test.sh
export TCLLIBPATH="$TCLLIBPATH  /tmp"

#cat /etc/profile.d/linuxcnc.sh
export TCLLIBPATH="$TCLLIBPATH  /usr/lib/tcltk/linuxcnc"

ребут
и
echo $TCLLIBPATH
#вам выведет /usr/lib/tcltk/linuxcnc /tmp
#а linuxcnc будет нормально работать
linuxcnc
И "новая волна накрыла с головой" - Выпуск языка программирования Tcl 8.6.14, http://pda.opennet.ru/opennews/art.shtml?num=60692
vs220
Теперь вы на собственном примере убедились что
потому еще раз

Пропустим информацию не несущую нового смысла...

vs220
можете проверить работу корректно прописанных скриптов для задания TCLLIBPATH
Да, вы правы, совершенно забыл проверить случаи "/tmp /usr/lib/tcltk/linuxcnc" или "/usr/lib/tcltk/linuxcnc /tmp" в зависимости от имени другого файла. Вновь установил пакет linuxcnc, который сделал вчера, для чистоты эксперимента и проверил - сработали оба варианта. Спасибо, что указали на это.

Поправил свой PKGBUILD и удалил лишнее в комментах к пакету.
 
Зарегистрироваться или войдите чтобы оставить сообщение.