скрипты в ~ / bin не работают при подключении через ssh

У меня есть сценарий в моей папке $HOME/bin. Когда я получаю удаленный доступ к своей машине, я не могу их использовать и не могу понять, почему. Они отлично работают, когда я нахожусь перед моим удаленным компьютером.

Я думаю, что это может иметь какое-то отношение к файлу .bashrc. PATH устанавливается с

PATH=$PATH:$HOME/bin
export PATH

, мне кажется, это правильно.

Я также попытался скопировать файл из папки /usr/bin, выйдя из системы и войдя в нее снова, но все же мне не удается использовать свой сценарий.

Если я зайду в каталог ~/bin и наберу ./myscript сценарий будет работать (просто мне нужно запустить его из разных папок, где у меня есть несколько файлов для обработки).

2
задан 17 February 2014 в 21:35

2 ответа

Это происходит, потому что при входе на пути SSH, оболочка, Вы добираетесь, оболочка входа в систему. Напротив, для использования терминологии от bash документация при открытии Окна терминала на уже запущенной графической сессии входа в систему, оболочка, которую Вы получаете, является все еще интерактивной оболочкой, но это не оболочка входа в систему.

От man bash:

Когда удар вызывается как интерактивная оболочка входа в систему, или как неинтерактивная оболочка с - опция входа в систему, он сначала читает и выполняет команды из файла /etc/profile, если тот файл существует. После чтения того файла это ищет ~/.bash_profile, ~/.bash_login, и ~/.profile, в том порядке и чтениях и выполняет команды от первой, которая существует и читаема. - noprofile опция может использоваться, когда оболочка запускается для запрещения этого поведения.

Когда оболочка входа в систему выходит, удар читает и выполняет команды из файла ~/.bash_logout, если это существует.

Когда интерактивная оболочка, которая не является оболочкой входа в систему, запускается, удар читает и выполняет команды от /etc/bash.bashrc и ~/.bashrc, если эти файлы существуют. Это может быть запрещено при помощи - norc опция. - rcfile опция файла вынудит удар считать и выполнить команды из файла вместо /etc/bash.bashrc и ~/.bashrc.

Таким образом, необходимо проверить, есть ли у Вас какой-либо из этих файлов:

  • ~/.bash_profile

  • ~/.bash_login

  • ~/.profile

Если Вы делаете, то необходимо отредактировать первый, Вы находите и заставляете его добавить $HOME/bin к Вашему пути. Если Вы не делаете, создайте одного из них с этой целью. (Лучший для создания ~/.profile так как другие оболочки будут использовать это также.)

Вы почти наверняка имеете ~/.profile, так как поведение Ubuntu по умолчанию состоит в том, чтобы создать это с любой новой учетной записью пользователя (включая первую учетную запись, созданную при установке Ubuntu).

Однако по умолчанию этот файл уже содержит необходимые строки для добавления частного bin каталог к $PATH:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Таким образом, немного странно, что это уже не работает на Вас.

В зависимости от Ваших потребностей Вы могли бы хотеть сделать ~/.profile (или ~/.bash_login или ~/.bash_profile) звонить ~/.bashrc:

source ~/.bashrc

Но было бы еще лучше просто включать добавление строк $HOME/bin к Вашему $PATH в ~/.profile (или ~/.bash_login или ~/.bash_profile), но нет ~/.bashrc. В конце концов, если Вы делаете это для каждой оболочки входа в систему, это должно также произойти, когда Вы входите в систему графически, и быть наследованными всеми Вашими интерактивными оболочками, которые не являются оболочками входа в систему.

3
ответ дан 17 February 2014 в 21:35

Просто поместите вашу конфигурацию в файл .bash_profile в домашнем каталоге.

Если у вас его нет, вы можете его создать.

0
ответ дан 17 February 2014 в 21:35

Другие вопросы по тегам:

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