Bash не читает .bashrc, если вручную не запущено

Хотя обе работы для меня, я думаю, что совет Lev Levitsky является корректным. Используйте -b аргумент.

Существует хороший шанс, что перенаправление вывода является проблемой и что Вы ничего не получаете через stdout, так попробуйте это вместо этого:

top -b 2>&1 | grep "my_program" > top.log

Действительно обратите внимание, что у Вас могли бы быть проблемы с выводом, буферизующим также. Ваша оболочка не будет постоянно писать в файл, таким образом, это могло требовать времени для top.log заполниться.

23
10.10.2013, 21:33
2 ответа

Почему это получило бы его? Вы не работаете верный bash:

$ echo $SHELL
/bin/sh

В большинстве современных систем sh символьная ссылка на основную оболочку. На моем Debian, например:

$ ls -l /bin/sh 
lrwxrwxrwx 1 root root 4 Aug  1  2012 /bin/sh -> dash

В Вашем случае, sh ссылка на bash но, как объяснено в man bash:

Если удар вызывается с именем sh, это пытается подражать поведению запуска исторических версий sh максимально тесно при приспосабливании стандарту POSIX также. [...] При вызове как интерактивная оболочка с именем sh удар ищет переменный ENV, разворачивает его значение, если это определяется и использует расширенное значение в качестве названия файла, чтобы читать и выполниться. Начиная с оболочки, вызванной, поскольку, sh не пытается считать и выполнить команды из любых других файлов запуска, - rcfile опция не имеет никакого эффекта.

и

- norc
Не читайте и выполняйте файл инициализации в масштабе всей системы/etc/bash.bashrc и персональный файл инициализации ~/.bashrc, если оболочка является интерактивной. Эта опция идет по умолчанию, если оболочка вызывается как sh.

Так, так как Ваша оболочка по умолчанию sh, .bashrc не читается. Просто установите свою оболочку по умолчанию для избиения использования chsh -s /bin/bash.

19
27.01.2020, 19:41
  • 1
    . Я предположил, что это не имело значения с тех пор /bin/sh указанный /bin/bash. Я предполагаю эту проблему, остановленную от явного присвоения оболочки к /bin/bash когда я первоначально создал учетную запись пользователя. –  haste 10.10.2013, 21:56
  • 2
    Кроме того, Debian/Ubuntu, переключенный на dash для /bin/sh как часть усилия уменьшить время запуска. Это было весело, когда мои пользователи начали спрашивать, почему их оболочка действовала по-другому. –  kurtm 10.10.2013, 23:14

В .bash_profile удостоверяются, что у Вас есть следующее:

# .bash_profile

# If .bash_profile exists, bash doesn't read .profile
if [[ -f ~/.profile ]]; then
  . ~/.profile
fi

# If the shell is interactive and .bashrc exists, get the aliases and functions
if [[ $- == *i* && -f ~/.bashrc ]]; then
    . ~/.bashrc
fi
19
27.01.2020, 19:41
  • 1
    @terdon Ваш ответ является корректным. Мой ответ только был бы действителен, если бы он работал bash. Хорошая выгода, я пропустил это. –  Jeight 10.10.2013, 21:47
  • 2
    Это могло бы дать Вам несколько головных болей, если Вы работаете bash вместе с другой оболочкой, такой как ksh93 который использует .profile по умолчанию. –  Kusalananda♦ 31.07.2016, 21:05
  • 3
    Если ~/.bash_profile не существует, можно создать его. код Волшебства –  Pratik Singhal 10.07.2017, 08:46

Теги

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