在Unix / Bash中,“xargs -p”是在运行任何命令之前提示确认的好方法吗?

时间:2010-08-03 21:14:09

标签: bash unix shell

我已经问过如何发出任何命令“请求是/否 在执行“问题

之前

In Bash, how to add "Are you sure [Y/n]" to any command or alias?

似乎是命令

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 个答案:

答案 0 :(得分:3)

使用别名的缺点是它不会接受参数。如果您想要概括hg命令,以便可以将其与任何用户名,主机名或路径一起使用,则必须使用脚本或函数。

顺便说一句,使用脚本“标准的Unix / Bash”。一个简单的脚本或函数就像一个别名一样容易(更容易,真的,因为增加的功能和多功能性)。别名对于非常简短,非常简单的命令快捷方式非常有用。它们经常用于启用默认选项(例如alias ls='ls --color=auto')。

对于经常使用不需要参数的不变的命令(除了那些可以在末尾附加的命令),别名完全没问题。以您展示的方式使用xargs并没有错。它有点矫枉过正,这是对外部可执行文件的不必要的调用,但在这种情况下这不应该是重要的。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我有时使用这样的包装来自定义命令。

ls () { command ls -F "$@"; }

这定义了一个包装原始命令的函数,并保留PATH变量变量。