В Unix/Bash есть ли "xargs -p" хороший способ запросить подтверждение перед запуском любой команды?
Я спросил, как сделать любую команду "попросить" да/нет "перед выполнением" в вопросе
В Bash, как добавить "Вы уверены, что [Y/n]" к любой команде или псевдониму?
Кажется, что для команды
hg push ssh://[email protected]//somepath/morepath
Я также могу это сделать
echo ssh://[email protected]//somepath/morepath | xargs -p hg push
-p
- это тот, который выполняет трюк. Это будет установлено
как псевдоним, например hgpushrepo
. Это хороший способ,
любые подводные камни или любые лучшие альтернативы для этого? я был
надеясь использовать что-то стандартное Unix/Bash
вместо записи script, чтобы сделать это.
Ответы
Ответ 1
Недостатком использования псевдонима является то, что он не будет принимать параметры. Если вы хотите обобщить эту команду hg
, чтобы вы могли использовать ее с любым именем пользователя, именем хоста или путем, вам нужно будет использовать script или функцию.
Кстати, использование script является "стандартным Unix/Bash". Простой script или функция так же просто (проще, действительно, из-за повышенной мощности и универсальности) в качестве псевдонима. Псевдонимы полезны для очень коротких, чрезвычайно простых сочетаний клавиш. Часто они используются для включения опции по умолчанию (например, alias ls='ls --color=auto'
).
Для неизменяемых команд, которые вы часто используете, которые не нуждаются в аргументах (кроме тех, которые могут быть добавлены в конце), псевдонимы отлично подходят. И нет ничего плохого в использовании xargs
в том, как вы показываете. Это немного перебор, и это ненужный вызов внешнего исполняемого файла, но это не должно быть значительным в этом случае.
Ответ 2
xargs
имеет неприятную тенденцию приводить к неудобным неожиданностям из-за проблемы разделителя https://en.wikipedia.org/wiki/Xargs#Separator_problem
GNU Parallel http://www.gnu.org/software/parallel/ не имеет этого
проблема и, следовательно, может быть более безопасным выбором.
seq 10 | parallel -p echo
Смотрите видеоролик для GNU Parallel:
http://www.youtube.com/watch?v=OpaiGYxkSuQ
Ответ 3
Я иногда использую такие обертки для настройки команд.
ls () { command ls -F "[email protected]"; }
Определяет функцию, обертывающую исходную команду, и сохраняет переменную переменной PATH
.