LINUX.ORG.RU
ФорумAdmin

-bash: append_path: команда не найдена

 ,


0

1

Manjaro linux. Каждый раз, при входе в консоль, будь то локальный терминал или удалённо, вижу это:

-bash: append_path: команда не найдена
-bash: append_path: команда не найдена
-bash: append_path: команда не найдена


Пробовал гуглить, например вот или вот, но не помогло.

Никакого криминала в sudo vim /etc/profile* не нашёл.
Куда копать? Как выяснить, что это вообще?

Это должно быть в сценарии /etc/profile

append_path () {
    case ":$PATH:" in
        *:"$1":*)
            ;;
        *)
            PATH="${PATH:+$PATH:}$1"
    esac
}

Я с ней знаком только потому, что боролся с порядком /usr/local/bin, /usr/bin в PATH вручную.
Там целая история оказывается, чтобы заставить Arch не ходить сначала в /usr/local/bin. Такая локальная хотелка была.

Toxo2 ★★★
()
Ответ на: комментарий от cetjs2

какой .bashrc/.bash_profile?

Там никакого криминала.

под чистым пользователем проявляется?

В смысле? Проявляется если открыть терминал, или переключиться на текстовой по ^ alt F2

hikikomori ★★★
() автор топика
Ответ на: комментарий от Toxo2

Так и есть. А ниже:

appendpath '/usr/local/sbin'
appendpath '/usr/local/bin'
appendpath '/usr/bin'
unset appendpath

export PATH



Но это вроде нужное, это я не трогал.

hikikomori ★★★
() автор топика
Ответ на: комментарий от cetjs2

Я 1 строчку из 3х закоментировал, количество ошибок не изменилось. Следовательно не они виноваты.

hikikomori ★★★
() автор топика
Ответ на: комментарий от hikikomori

Если вы дословно привели строчки, то вот это:

unset appendpath
у вас рано.

Оно должно сначала перебрать все дополнительные файлы в /etc/profile.d и только потом unset эту функцию.

Ищете кто и где её пытается вызвать после unset.

Toxo2 ★★★
()
Последнее исправление: Toxo2 (всего исправлений: 1)
Ответ на: комментарий от Toxo2

опс..... у вас точно appendpath? а не append_path?

Хм, тогда выглядит так, словно какая-то запчасть из Arch хочет append_path, но у вас в Manjaro её вообще нет, но есть appendpath.

Toxo2 ★★★
()
Ответ на: комментарий от Toxo2

В /etc/profile ниже unset appendpath, никто не упоминает appendpath. В упоминаемых путях ниже тоже нет обращений к appendpath

hikikomori ★★★
() автор топика
Ответ на: комментарий от hikikomori

Строго говоря в Arch пакет filesystem 2020.09.03-01, а в Manjaro filesystem 2020.09.2

Только вот если смотреть внутрь сюда: https://gitlab.manjaro.org/packages/core/filesystem/-/blob/master/profile, то там всё-таки должен быть именно append_path.

Проверьте версию установленного пакета filesystem.

Toxo2 ★★★
()
Ответ на: комментарий от Toxo2

filesystem-2020.09-2 не устарел

Я вот что нашёл:


find /etc/profile.pacnew -type f -not -regex ".*\.\(JPG\|jpg\|jpeg\|gif\|pdf\|mov\)$"  -exec egrep -iH  'append_path' {} \;
/etc/profile.pacnew:append_path () {
/etc/profile.pacnew:append_path '/usr/local/sbin'
/etc/profile.pacnew:append_path '/usr/local/bin'
/etc/profile.pacnew:append_path '/usr/bin'
/etc/profile.pacnew:unset -f append_path

hikikomori ★★★
() автор топика
Последнее исправление: hikikomori (всего исправлений: 1)
Ответ на: комментарий от hikikomori

profile.pacnew - вот об этом и речь. filesystem обновился, но не стал перетирать старый /etc/profile.

а потом - что-то прилетело в обновлениях, что расчитывает уже на новый формат /etc/profile.

Только вот что - вы пока не нашли. Что-то должно вызывать именно append_path

Toxo2 ★★★
()
Ответ на: комментарий от Toxo2

Хорошо, я закомментил:

sudo find /etc/ -type f -not -regex ".*\.\(JPG\|jpg\|jpeg\|gif\|pdf\|mov\)$"  -exec egrep -iH  'append_path' {} \;
/etc/profile.d/perlbin.sh:[ -d /usr/bin/site_perl ] && append_path '/usr/bin/site_perl'
/etc/profile.d/perlbin.sh:[ -d /usr/bin/vendor_perl ] && append_path '/usr/bin/vendor_perl'
/etc/profile.d/perlbin.sh:[ -d /usr/bin/core_perl ] && append_path '/usr/bin/core_perl'

 cat /etc/profile.d/perlbin.sh
# Set path to perl scriptdirs if they exist
# https://wiki.archlinux.org/index.php/Perl_Policy#Binaries_and_scripts
# Added /usr/bin/*_perl dirs for scripts

# [ -d /usr/bin/site_perl ] && append_path '/usr/bin/site_perl'

# [ -d /usr/bin/vendor_perl ] && append_path '/usr/bin/vendor_perl'

# [ -d /usr/bin/core_perl ] && append_path '/usr/bin/core_perl'

# export PATH

# If you have modules in non-standard directories you can add them here.
#export PERLLIB=dir1:dir2


Вроде бы ошибка пропала, но правильно ли я поступил и не приведёт ли это к другим последствиям? Не посыпется ли что связанное с perl?

hikikomori ★★★
() автор топика
Последнее исправление: hikikomori (всего исправлений: 2)
Ответ на: комментарий от hikikomori

Вроде бы ошибка пропала, но правильно ли я поступил и не приведёт ли это к другим последствиям?

Не знаю.

Я бы, наверное, попытался наоборот (раз уж всё-равно теперь будет append_path официальной версией), то логичнее было бы сверить глазами, что там изменилось в /etc/profile.pacnew в сравнении c текущим /etc/profile, перенести в pacnew те изменения, которые важны на вашей системе и таки сделать pacnew текущим.

Но это надо аккуратно. Вдруг у вас там что-то хитрое в старом.

Toxo2 ★★★
()
Последнее исправление: Toxo2 (всего исправлений: 2)
1 мая 2022 г.
Ответ на: комментарий от Toxo2

/etc/profile.pacnew для системы приоритетный конфиг или просто бэкап пакмана, если я правильно понимаю? Я не понимаю, какая актуальная в системе переменная appendpath или append_path. Сам я ничего не менял, это скрипты при обновлениях. Я не знаю что это может затронуть, как правильно разрешить эту проблему.

diff  /etc/profile.pacnew   /etc/profile  | xclip -sel clip

паста вывода:

6,8c6,7
< # Append "$1" to $PATH when not already in.
< # This function API is accessible to scripts in /etc/profile.d
< append_path () {
---
> # Append our default paths
> appendpath () {
17,20c16,19
< # Append our default paths
< append_path '/usr/local/sbin'
< append_path '/usr/local/bin'
< append_path '/usr/bin'
---
> appendpath '/usr/local/sbin'
> appendpath '/usr/local/bin'
> appendpath '/usr/bin'
> unset appendpath
22d20
< # Force PATH to be environment
33,42c31,32
< # Unload our profile API functions
< unset -f append_path
< 
< # Source global bash config, when interactive but not posix or sh mode
< if test "$BASH" &&\
<    test "$PS1" &&\
<    test -z "$POSIXLY_CORRECT" &&\
<    test "${0#-}" != sh &&\
<    test -r /etc/bash.bashrc
< then
---
> # Source global bash config
> if test "$PS1" && test "$BASH" && test -z ${POSIXLY_CORRECT+x} && test -r /etc/bash.bashrc; then
50a41,61
> 
> # New environment setting added by Winpower 5.7.0.3 on Sun May 03 03:04:50 MSK 2020 1.
> # The unmodified version of this file is saved in /etc/profile487990005.
> # Do NOT modify these lines; they are used to uninstall.
> LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/sfw/lib:/usr/local/lib"
> export LD_LIBRARY_PATH
> # End comments by InstallAnywhere on Sun May 03 03:04:50 MSK 2020 1.
> 
> # New environment setting added by Winpower 5.7.0.3 on Sun May 03 03:04:50 MSK 2020 4.
> # The unmodified version of this file is saved in /etc/profile487990005.
> # Do NOT modify these lines; they are used to uninstall.
> SHLIB_PATH="${SHLIB_PATH}"
> export SHLIB_PATH
> # End comments by InstallAnywhere on Sun May 03 03:04:50 MSK 2020 4.
> 
> # New environment setting added by Winpower 5.7.0.3 on Sun May 03 03:04:50 MSK 2020 7.
> # The unmodified version of this file is saved in /etc/profile487990005.
> # Do NOT modify these lines; they are used to uninstall.
> LIBPATH="${LIBPATH}"
> export LIBPATH
> # End comments by InstallAnywhere on Sun May 03 03:04:50 MSK 2020 7.


hikikomori ★★★
() автор топика
Ответ на: комментарий от Toxo2

Я пока сделал так:

sudo cp /etc/profile /etc/profile.back
sudo vim /etc/profile

и просто изменил appendpath на append_path.

  6 # Append our default paths
  7 append_path () {  
  8     case ":$PATH:" in
  9         *:"$1":*)
 10             ;;
 11         *)
 12             PATH="${PATH:+$PATH:}$1"
 13     esac
 14 }
 15 
 16 append_path '/usr/local/sbin'
 17 append_path '/usr/local/bin'
 18 append_path '/usr/bin'
 19 unset append_path
 20 
 21 export PATH

Скажите, зачем там unset append_path? Я так полагаю это ф-ция, и её уничтожают. Она что, иначе живёт вне процесса скрипта?

Пока залогинился в tty2, всё ок, без ошибок. Попробую обновиться и погляжу что будет.

hikikomori ★★★
() автор топика
Ответ на: комментарий от Toxo2

у вас рано.

Я тут немного переосмыслил конфиг. Вы считаете, что нужно перенести unset append_path из строки 19 в 30? Или между 28-29 вставить? И надо ли это делать, ошибок то нет никаких вроде… (пытаюсь разобраться)

  6 # Append our default paths
  7 append_path () {
  8     case ":$PATH:" in
  9         *:"$1":*)
 10             ;;
 11         *)
 12             PATH="${PATH:+$PATH:}$1"
 13     esac
 14 }
 15 
 16 append_path '/usr/local/sbin'
 17 append_path '/usr/local/bin'
 18 append_path '/usr/bin'
 19 unset append_path
 20 
 21 export PATH
 22 
 23 # Load profiles from /etc/profile.d
 24 if test -d /etc/profile.d/; then
 25     for profile in /etc/profile.d/*.sh; do
 26         test -r "$profile" && . "$profile"
 27     done
 28     unset profile
 29 fi
 30 

upd. Хотя:

find /etc/profile.d/* -type f -not -regex ".*\.\(JPG\|jpg\|jpeg\|gif\|pdf\|mov\)$"  -exec egrep -iH  'append_path' {} \;
/etc/profile.d/flatpak-bindir.sh:  append_path "$XDG_DATA_HOME/flatpak/exports/bin"
/etc/profile.d/flatpak-bindir.sh:  append_path "$HOME/.local/share/flatpak/exports/bin"
/etc/profile.d/flatpak-bindir.sh:  append_path /var/lib/flatpak/exports/bin
/etc/profile.d/perlbin.sh:# [ -d /usr/bin/site_perl ] && append_path '/usr/bin/site_perl'
/etc/profile.d/perlbin.sh:# [ -d /usr/bin/vendor_perl ] && append_path '/usr/bin/vendor_perl'
/etc/profile.d/perlbin.sh:# [ -d /usr/bin/core_perl ] && append_path '/usr/bin/core_perl'

то есть переносить надо, иначе там не добавятся пути, если есть обращения к данной ф-ции? Тогда остаётся вопрос, в какую строку.

hikikomori ★★★
() автор топика
Последнее исправление: hikikomori (всего исправлений: 1)
Ответ на: комментарий от hikikomori

Может проще взять текущее содержание отсюда: https://gitlab.manjaro.org/packages/core/filesystem/-/blob/master/profile да и вставить себе в /etc/profile ?

По-моему вы сами себя запутываете. Если бы вы вносили ручные правки в этот файл - вы бы наверняка помнили какие и зачем, мне кажется. Взяли бы текущий вариант, который разработчики предлагают в пакете текущей версии и вся недолга.

----------------

  1. Определили функцию
  2. Попользовались
  3. Отменили определение функции

vs

  1. Определили функцию
  2. Отменили определение переменной с таким же имением
  3. Всё-равно попользовались функцией
Toxo2 ★★★
()

Поржал. И над «умниками» в топике тоже.

Boott
()
Ответ на: комментарий от Boott

Например вместо в начале скрипта

 #/bin/bash
накрябать двоеточие
:
Разницы не будет.

Boott
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.