Рейтинг:3

Вопрос о поведении bash в неинтерактивном режиме

флаг pl

Мне в основном нужно понять следующее поведение:

$ эхо $ ОБОЛОЧКА
/бин/баш
$ bash -c эхо $SHELL

bash -c эхо $SHELL выводит пустой вывод, и это меня смущает, потому что я ожидаю, что SHELL будет установлен. Это верно и для $BASH_VERSION.

Может кто-то объяснить это мне?

Спасибо за ваше время!

Рейтинг:7
флаг hr

От человек:

   -c Если указана опция -c, то команды считываются из
             первый аргумент без опций command_string. Если есть споры…
             после command_string первый аргумент имеет вид:
             подписывается значением $0, а все оставшиеся аргументы назначаются
             позиционные параметры.

В bash -c эхо $SHELL, "первый необязательный аргумент" является эхо, пока $ ОБОЛОЧКА расширяется вашей текущей интерактивной оболочкой и передается в бить как позиционный параметр $0. С эхо не имеет аргументов сам, Баш-с эхо печатает пустую строку. Тем временем, $0 установлен на /бин/баш но игнорировал.

В зависимости от того, что вы пытаетесь сделать, вы можете либо сделать

bash -c 'эхо $SHELL'

который проходит эхо $SHELL как command_string в неинтерактивную оболочку bash (вывод значения неинтерактивной оболочки $ ОБОЛОЧКА), или же

bash -c 'эхо $0' $SHELL

который передает (расширение) интерактивную оболочку $ ОБОЛОЧКА в неинтерактивную оболочку bash как $0, затем повторяет его значение.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.