Сервер ubuntu 14.04 не может выбраться из tty

Обычно у вас нет .bash_profile на Ubuntu, и вы обычно не создаете этот файл. Как говорит jpezz, это будет в вашем домашнем каталоге вашей системы Ubuntu, что означает ~, и вы можете его создать там. Но если вы это сделаете, вы должны быть осторожны, потому что это предотвратит автоматическое выполнение bash команд в .profile, которые вы почти наверняка имеете.

Когда bash jpezz говорит , в WSL или иначе1, он запускает первую из .bash_profile, .bash_login или .profile, которая существует в вашем домашнем каталоге. Если у вас есть bash -специфические команды, которые вы хотите запустить при входе в систему, но только когда bash является вашей оболочкой, вы можете поместить их в .bash_profile. Но простое существование .bash_profile предотвратило бы использование .profile.

Итак, вы хотели бы указать источник .profile из .bash_profile, предполагая, что вы хотите, чтобы эти команды тоже запускались, что вы почти всегда будете. Вы можете сделать это, поместив эту команду в .bash_profile:

. ~/.profile

(Некоторые читатели могут привыкнуть видеть, что написано как . "$HOME/.profile", когда оно появляется в сценарии запуска. Это всегда хорошо - и вы можете предпочесть использовать это для команд, которые должны работать с оболочками, отличными от bash, если вам нужно разместить очень старые оболочки, которые не поддерживают source , что ... ну, вы В любом случае bash всегда поддерживает bash , а точка .bash_profile состоит в том, что только bash запускает команды из него, поэтому . ~/.profile в порядке. )

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

Обычно у вас нет .bash_profile на Ubuntu, и вы обычно не создаете этот файл. что по умолчанию файлы .profile у пользователей содержат код, который проверяет, является ли текущая оболочка bash, а затем заставляет такие команды запускаться.

Есть еще один ответ на вопрос о том, где файлы, например .profile или .bash_profile. Стандартные версии этих файлов существуют в каталоге /etc/skel. Файлы в этом каталоге копируются в домашние каталоги Ubuntu, когда учетные записи пользователей создаются в системе Ubuntu, включая учетную запись пользователя, которую вы создаете как часть установки Ubuntu. Если вы посмотрите в этом каталоге, вы заметите, что есть файл с именем .profile - а также некоторые другие файлы, такие как .bashrc, но нет файла с именем .bash_profile. Вот почему - или, действительно, do - no .bash_profile существует в вашем домашнем каталоге Ubuntu, если вы не создали его самостоятельно.

Наконец, вы не должны ставить псевдонимы в .profile вообще, и .bash_profile не подходит для них, как справедливо говорит гейрха. Это связано с тем, что вы хотите, чтобы ваши псевдонимы работали в интерактивных оболочках независимо от того, являются ли они командами входа в систему. Вместо этого определите свои псевдонимы в .bashrc или, лучше, .bash_aliases (в качестве гостевых богеров), которые по умолчанию .bashrc источники. См. Как создать постоянный псевдоним Bash?

Файл .profile по умолчанию проверяет, используете ли вы .bash оболочку и источник .bashrc, если вы:

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

Между тем, по умолчанию .bashrc выйдет сверху, ничего не сделав, если он запустится в неинтерактивной оболочке, поэтому команды в нем не будут выполняться, если он будет получен из .profile в неинтерактивном входе shell и в других более неясных сценариях 1 :

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

Итак, если вы Наконец, вы не должны ставить псевдонимы в .profile вообще, а также .bash_profile хорошее место для них, , вы получите их для интерактивных оболочек входа (где используется .profile), а также интерактивные оболочки без входа (где используется .bashrc). Это то, что вы хотите. Просто не ставьте ничего выше проверки интерактивности, если вы действительно неинтерактивный знаете, что вы делаете.

1 Этот ответ был первоначально написан для . geirha справедливо говорит , но этот вопрос был закрыт как дубликат, и этот ответ также полностью применяется здесь, поэтому я немного расширил и разместил его здесь вместо этого.

1 Когда bash обнаруживает, что он, вероятно, работает как исходная оболочка удаленного входа, которая не является оболочкой входа - например, когда вы используете ssh для запуска отдельной команды на удаленном компьютере - она ​​запускает команды из .bashrc. (См. guest boeroe указывает на в руководстве GNU Bash.)

1
задан 28 November 2014 в 11:15

0 ответов

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

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