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