Почему Bash, не могущий найти команду, даже если $PATH указан правильно?

ответ andcoz предоставил мне хороший критерий поиска, т.е. просто использование

$ apt-cache search gallery

результаты в некоторых пакетах, соответствующих указанным выше критериям, например.

  • мусорные ведра
  • igal2 - Симпатичный пленочный эффект барабана в галерее по умолчанию, масштабирование исходных изображений не является значением по умолчанию (см. --bigy), домашняя страница и страница справочника пропускают некоторые примеры использования
  • jigl
  • lazygal - Темы легко изменяться/корректировать, вместо следующих/предыдущих ссылок маленькие миниатюры (в слева/справа), маленькие/средние масштабированные представления по умолчанию, --original создает ссылки на исходные файлы
  • llgal
  • фотон - Дополнительная функция слайд-шоу с помощью JavaScript, некоторого масштабирования и ссылки на доступное исходное изображение
  • webmagick

(В соответствии с Ubuntu 10.04)

9
23.08.2012, 11:45
3 ответа

tl; доктор

Выполнение ssh 127.0.0.1 ydisplay источники ~/.bashrc вместо /etc/profile. Измените свой путь в ~/.bashrc вместо этого.

подробнее

Единственное время /etc/profile читается, когда Ваша оболочка является "оболочкой входа в систему".

Из справочника Bash:

Когда удар вызывается как оболочка входа в систему... он сначала читает и выполняет команды из файла/etc/profile

Но когда Вы работаете ssh 127.0.0.1 ydisplay, bash не запускается как оболочка входа в систему. Все же это действительно читает другой файл запуска. В Справочнике Bash говорится:

когда... выполняется... sshd.... это читает и выполняет команды от ~/.bashrc

Таким образом, необходимо поместить Ваш PATH настройки в ~/.bashrc.

В большинстве систем, ~/.bash_profile источники ~/.bashrc, таким образом, можно поместить настройки только в ~/.bashrc вместо того, чтобы помещать их в оба файла.

Нет никакого стандартного способа изменить настройки для всех пользователей, но большинство систем имеет a /etc/bashrc, /etc/bash.bashrc, или подобный.

Сбой этого, настроенного pam_env и помещенный PATH начинание /etc/environment.

См. также:

5
27.01.2020, 20:07

Исторически, файлы профиля (/etc/profile и ~/.profile) были вызваны, когда Вы вошли в систему (на текстовой консоли, что еще?) и подаваемый много целей:

  • Переменные среды набора и другие параметры (например, umask) для сессии.
  • Запустите дополнительные программы в начале сессии (например, уведомление по электронной почте).
  • Запустите программу для сессии, если отличающийся от оболочки (например, другой оболочки или X Window).
  • Установите терминальные параметры (например. stty).
  • Установите параметры оболочки (например, псевдонимы).

Все эти цели не были идентифицированы как отдельные до позже. Поскольку сценарии профиля могут сделать вещи, которые только имеют смысл на интерактивной сессии (терминальное взаимодействие, запустите другие программы), когда удаленный вызов оболочки (rsh) был представлен, делание из rsh решило не вызвать удаленную оболочку как оболочку входа в систему, так, чтобы сценарии профиля не были выполнены. (Некоторые версии rshd имейте опцию выполнить удаленную оболочку как оболочку входа в систему.) Ssh скопировал это поведение, чтобы быть общедоступной заменой для rsh.

Если Вы хотите выполнить свои сценарии профиля, можно вызвать их явно.

ssh 127.0.0.1 '. /etc/profile; . ~/.profile; ydisplay'

Отметьте команду . загрузить сценарии профиля в оболочке: они - команды, которые будут выполняться в той оболочке, не внешней программе.

Если Вы хотите установить переменную среды глобально для всех пользователей, во многих системах существует другой метод: вместо того, чтобы определить его в /etc/profile, определите его в /etc/environment. Этот файл прочитан pam_env модуль; большинство дистрибутивов Linux настраивается для чтения его.

Если Ваша оболочка входа в систему является ударом, существует дальнейшая возможность. Обычно, Вы не должны устанавливать переменные среды в .bashrc (потому что они не будут установлены на X сессиях кроме того, если Вы пройдете терминал с интерактивной оболочкой, потому что они не будут установлены, если Вы войдете в систему в интерактивном режиме на текстовой консоли или по ssh, потому что они переопределят пользовательские настройки, если Вы вызовете оболочку в другой программе). Однако удар имеет странную функцию, которую я никогда не понимал: это читает ~/.bashrc при двух несвязанных обстоятельствах:

  • в интерактивных оболочках, которые не являются оболочками входа в систему;
  • в неинтерактивных оболочках, которые не являются оболочками входа в систему, если удар думает, что был вызван rshd или sshd.

При выполнении команды по ssh Вы находитесь во втором случае. Можно расположить считать профиль путем чтения /etc/profile и .profile от .bashrc. Включайте следующий код в Ваш ~/.bashrc:

case $- in
  *i*) :;; # this is an interactive shell, fine
  *) # This is not an interactive shell! This must be a non-interactive remote shell session.
    . /etc/profile; . ~/.profile
    return;;
esac
1
27.01.2020, 20:07

У меня уже была эта проблема. Причина проста,

If you have two executable files sharing the same name located in two different directories, the shell will run the file that is in the directory that comes first in the $PATH

Источник:Как добавить каталог в PATH в Linux

У меня было приложение Pointwise.Когда я проверил, где находится его исполняемый файл, я заметил следующее:

:~> which pointwise
/usr/local/bin/pointwise

который был пуст, но при установке этот каталог был создан. Когда я проверил $PATH, у меня было:

/usr/bin/path:/home/mendezj/bin:/usr/local/bin:/usr/bin:/bin:/opt/pbs/bin:/opt/sim_pkgs/working/apps/POINTWISE

Обратите внимание, что я изменил /etc/profileи добавил фактический путь к исполняемому файлу. Чтобы решить проблему, я изменил местоположение исполняемого файла. Я вывел его в начало переменной $PATH.

Это было:

PATH="$PATH:/opt/sim_pkgs/working/apps/POINTWISE"

и я изменил его на:

PATH="/opt/sim_pkgs/working/apps/POINTWISE:$PATH"

Проблема решена, так как перед переходом к /usr/local/binпросматривается первая запись.

-1
24.11.2021, 14:00

Теги

Похожие вопросы