Что означает этот env var? «_ = / USR / бен / kdeinit»

0
cshell> env 
...
_=/usr/bin/kdeinit

Я подозреваю, что эта переменная замедляет запуск vim. Теперь я должен запустить 'vim -X', иначе для запуска vim требуется 6 секунд.

Я не могу Google, потому что большинство ответов, связанных с "env var underscore", объясняют "$ _", а это не то, что я хочу.

Яо Джин
источник
1
Но $_ это , как вы бы получить доступ к нему ...?
Даниэль Б
1
$ _ - это специальная переменная, которая хранит последнюю команду, является ли она _вenv
Yao Jin
Да, это то же самое. Так же, как вы используете $ PATH для доступа к переменной окружения PATH. Я не знаю, почему оболочки имеют тенденцию экспортировать $ _ в окружающую среду, но они делают. Поэтому, когда запускался сценарий оболочки / usr / bin / kdeinit, он экспортировал это.
Gravity
@YaoJin: На самом деле это последний параметр последней команды. Например, это будет true one two three; echo $_
повторять
Спасибо вам всем. Теперь я это понимаю. Это последняя команда после запуска оболочки;
Яо Джин

Ответы:

1

Простой ответ с помощью csh

Если вы беспокоитесь только о C Shell, это легко. Это командная строка последней выполненной команды. См. Подстановка переменных в документации tcsh

Простой ответ с Bash

В Bash документация в главе Специальные параметры говорит нам следующее:

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

Так что в bash это обычно последний аргумент предыдущей команды. Обычно...

Сложный ответ с bash и csh

В вашем случае программа kdeinit была вызвана из оболочки Bash. Перед выполнением kdeinit полный путь к команде ( / usr / bin / kdeinit ) был скопирован bash в переменную окружения подчеркивания, как указано ниже. Программное обеспечение kdeinit инициализировало вашу графическую среду, распространяя эту переменную среды на все дочерние процессы. Поэтому ваш терминал C Shell унаследовал эту переменную среды.

Когда вы находитесь в этой C-оболочке, возникает путаница между переменной оболочки $ _ и переменной среды _ . В C Shell, когда вы используете конструкцию $ name , она выводит переменную оболочки или переменную окружения, если переменная оболочки не существует. В этом случае они оба существуют и различны. Переменная окружения (как показано командой env ) всегда будет напоминать одно и то же значение / usr / bin / kdeinit, в то время как переменная оболочки будет продолжать изменяться, чтобы показать последнюю выполненную команду.

user210584
источник
1
Что касается вашей проблемы с vim, если вы хотите протестировать запуск vim без этой переменной среды, выполните следующую команду: env -u _
user210584