Когда `_` выпадает из среды? [дубликат]

El propietario de /etc y /boot es o debería ser root .

echo test > /etc/test 
bash: /etc/test: Permission denied

Solo el propietario raíz tiene permiso para crear archivos o eliminarlos del directorio.

-4
12.04.2018, 15:07
1 ответ

В Bash _— это специальный параметр, который устанавливается равным значению последнего аргумента каждый раз при разборе команды. Он также имеет специальное свойство не экспортироваться, которое применяется каждый раз, когда выполняется команда (, см.bind_lastargв исходном коде Bash ).

Когда вы запускаете Bash с помощью bash --norc, вы попадаете в подсказку, не выполнив ни одной команды; поэтому _, если он присутствовал в среде, не был перезаписан. Когда вы запускаете Bash из Bash, родительский Bash устанавливает _для команды, выполняемой в дочерней среде перед ее запуском; как и любая другая переменная, присутствующая в среде при запуске, _становится экспортируемой переменной, и, поскольку никакая команда не была запущена, эта переменная не была «неэкспортирована». Это объясняет, почему ваш первый exportсодержит его.

Как только вы запускаете команду (, ваша первая exportв этом случае ), _перезаписывается и теряет флаг экспорта. Это объясняет, почему ваш второй exportне показывает его.

(Внутри _такая же переменная, как и любая другая; так что его можно установить только для чтения -или пометить как целое, с забавными результатами.)

2
28.01.2020, 05:20

Теги

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