2014-09-05 4 views
0

Что делает эта команда alias?Понимание команды псевдонима bashrc

alias hello='sudo $(history -p \!\!)' 

Я хочу понять, что такое история и -p!

+1

http://www.gnu.org/software/bash/manual/bashref.html#Using-History-Interactively – jm666

+0

Ваш вопрос не про псевдоним. О команде. Вывод команды истории хранится в var. Все, что я могу вам рассказать, но проще всего найти команду истории – wonderwhy

ответ

3

Bash отслеживает команды, которые вы выполняете. Это называется вашей командой . Команда history позволяет вам получать доступ к истории команд и управлять ими.

Флаг -p указывает команде history выполнить замену истории на его аргумент и распечатать результат на стандартный вывод. При выполнении замены истории history заменяет !! предыдущей командой. В вашем случае каждый ! сбрасывается как \!, предположительно потому, что bash позволяет установить !, чтобы быть экстра-магическим, и автор этого псевдонима хотел подавить дополнительную магию.

Когда bash видит $(...), он выполняет команду command substitution. Это означает, что он выполняет команду между круглыми скобками и заменяет $(...) стандартным выходом команды,

Команда sudo выполняет свои аргументы с правами root.

Таким образом, этот псевдоним позволяет вам ввести hello для запуска вашей предыдущей команды с правами администратора. У вас возникнут проблемы, если предыдущая команда процитировала пробелы (я думаю), но обычно она должна работать.

Вы можете получить тот же эффект с (на мой взгляд) немного меньше магии с помощью fc:

alias hello='sudo $(fc -ln -1)' 

Команда fc также выполняет доступ к истории и манипуляции. Флаг -l означает «распечатать некоторые записи истории». Флаг -n означает, что не печатайте номера записей истории (просто распечатайте команды). -1 (отрицательный) означает печать только самой последней записи истории.

Смежные вопросы