Как сохранить распечатку последней команды в переменной оболочки в urxvt/zsh?

Когда вы вводите только команду - например. foo - оболочка (обычно bash ) будет искать его только в определенных каталогах - например, / bin, / usr / bin, / usr / X11R6 / bin и так далее. Обычно не ищет в вашем «текущем каталоге» (т.е. «.») Из-за проблем безопасности ( особенно , если вы root ). Если "." добавлен, он должен быть добавлен к в конец пути поиска.

Если вы хотите запустить исполняемый файл, который не в этом пути поиска, вам необходимо указать полный абсолютный или относительный путь к команде. Например:

/home/bok/foo   # Absolute in my homedir

~/src/bar  # Shorthand for my homedir and a subdir in it

../Download/foobar  # Relative path – up one step, then down in Download

Или - если команда находится в моем текущем каталоге - просто добавьте ./ :

./foo

Путь поиска для bash хранится в ] PATH переменная среды, чтобы вы могли увидеть ее, набрав:

echo $PATH

Чтобы добавить "." - чего вы действительно не должны делать - введите:

export PATH="$PATH:."

ПУТЬ ищется по порядку, поэтому, если есть несколько исполняемых файлов с одинаковым именем в разных каталогах, это тот, который находится в каталоге первым в ПУТЬ, который будет выполнять оболочка.

Сначала после просмотра всех перечисленных каталогов вы получите ошибку «команда не найдена».

+++

Проблема с добавлением текущего каталога - . - в PATH, заключается в том, что вы действительно не знаете, должен ли исполняться исполняемый файл в "нестандартном" каталоге, в котором вы случайно оказались, выполняться или нет.

Допустим, я злой и создаю деструктивную программу, которая удаляет как можно больше файлов и оставляет их в моем домашнем каталоге - или, что еще хуже, в / tmp ...Я называю эту программу sl - распространенный тип ошибки ls - и жду.

Какой-то случайный пользователь находится в / tmp и промахивается ls с sl . С обычным PATH - без. - ничего не происходит, кроме как «команда не найдена». Если он получил '.' в конце его PATH, тогда он не получит ошибки при вводе команды. Вместо этого моя команда sl будет запущена и удалит все файлы, которыми он владеет. Если он окажется root , команда сможет удалить большую часть системы. (Вот почему root действительно должен сделать правило всегда использовать полный путь команд, а не доверять PATH.)

Если бы он поставил '.' сначала в его PATH, и я создал программу под названием ls (правильное написание) и поместил ее в каталог, тогда это была бы моя программа, а не обычная ls - это будет выполнено, если он наберет ls в этом каталоге. Поскольку bash будет искать в текущем каталоге (.) сначала - прежде чем искать в системных каталогах с подлинным ls .

2
01.03.2016, 20:00
0 ответов

Теги

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