В 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.