В 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 переменная переменная.

Другие вопросы по тегам