Почему 'эхо 0$' дает другой результат для двух различных терминалов?

Что-то вроде этого?

find -type f -printf '%Ta\t%p\n' | egrep "^(Sun|Mon)" | cut -f 2-

Обратите внимание, что это использует время последнего изменения файла, не время создания (которым, насколько я знаю, не сохранен нигде),

15
08.02.2014, 01:33
3 ответа

Если вывод echo $0 команда -bash это означает это bash был вызван как оболочка входа в систему. Если вывод только bash, затем Вы находитесь в оболочке невхода в систему.

man bash говорит где-нибудь в строке 126:

A  login shell is one whose first character of argument zero is a -, or 
one started with the --login option.

Посмотрите больше о здесь: Различие между Входом в систему Shell и Невходом в систему Shell?.

Теперь, для объяснения, почему Вы добираетесь /bin/bash во втором случае я могу сказать, что программа (в Вашем случае Ваш файловый менеджер, вероятно, наутилус) или сценарий может изменить свое собственное $0 к чему-то еще. Как пример видят то, что происходит с $0 в моем терминале (тот же терминал все время):

enter image description here

16
27.01.2020, 19:49

Различие до способа, которым они были запущены. удар инициализирует по-другому (прочитайте различные сценарии запуска) в зависимости от он - argv [0]. Если строка запускается с дефиса - как в -bash затем это работает как оболочка входа в систему, в противном случае это будет работать как интерактивная оболочка. Это может также работать как неинтерактивная оболочка (т.е. в сценарии оболочки).

Для обнаружения больше, лучше читать руководство, man bash раздел INVOCATION.

12
27.01.2020, 19:49

Оболочка запускается, когда Вы входите в систему, но она также запускается программами как make, или когда Вы выполняете сценарий оболочки, или когда Вы вводите :sh кому: vi, или когда Вы создаете новое окно терминала.

Первоначально, чтение оболочки в ~/.profile когда Вы вошли в систему или работали su. Этот сценарий сделал бы, вещам нравится, объявляют, была ли у Вас новая электронная почта, настройте свое стирание и уничтожьте символы, и установите и экспортируйте ТЕРМИН и СОЕДИНИТЕ переменные каналом. При запуске почти в любом другом контексте оболочка не читала ~/.profile, потому что выполнение большинства тех вещей было бы избыточно. Вы, как ожидали, экспортируете любые важные переменные оболочки в новую оболочку.

Путем оболочка знала, читать ли в ~/.profile должен был проверить ли первый символ argv[0], иначе $0, был '-'.

Запуск с csh, псевдонимы были представлены. Псевдонимы не экспортировались в среде. csh был разработан для чтения в двух различных сценариях инициализации. ~/.login было только для чтения, когда пользователь вошел в систему, и сигнал, чтобы сделать, это было то, если argv[0] начался '-'. ~/.cshrc был считан каждый раз, когда оболочка была запущена. В целом, помещенный псевдоним в ~/.cshrc и все остальное в ~/.login. csh также поддерживаемый ~/.logout, который в большинстве случаев просто очистил экран и работал fortune.

Другие оболочки приняли эти те же функции. ksh читал бы в ~/.kshrc, bash читал бы в ~/.bashrc, и это было то, куда Вы поместите свои определения псевдонима.

Так, короче говоря, приложение, которое порождает оболочку, добирается, чтобы решить, должно ли это быть "оболочкой входа в систему", в этом случае существует это '-' вначале, или регулярная оболочка. В большинстве случаев оболочка, это будет интерактивным, запускается как оболочка входа в систему, и оболочка означала только выполнять некоторые команды, или поскольку аргументами или из сценария, и затем выходить является регулярная оболочка.

Но это - все до прихоти приложения, которое запускает оболочку.

9
27.01.2020, 19:49

Теги

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