用您最喜欢的编程语言检查参数

用您最喜欢的编程语言检查参数

相当多的 Linux 命令都有一个试运行选项,可以向您展示它们将要做什么而不需要执行。我在 xargs 手册页中没有看到任何内容可以做到这一点,也没有明显的方法来模拟它。

(我的具体用例是对长管道进行故障排除,尽管我确信还有其他用例)

我错过了什么吗?

答案1

您可能会受益于-p-t标志。

xargs -p或者xargs --interactive会打印出要执行的命令,然后在执行命令之前提示输入(y/n)进行确认。

% cat list
one
two
three

% ls
list

% cat list | xargs -p -I {} touch {}
touch one ?...y
touch two ?...n
touch three ?...y

% ls
list
one
three

xargs -t或者xargs --verbose将打印每个命令,然后立即执行它:

% cat list | xargs -t -I {} touch {}
touch one 
touch two 
touch three 

% ls
list
one
three
two

答案2

echo在要运行的命令前面加一个?

$ echo a b c d e | xargs -n2 echo rm
rm a b
rm c d
rm e

答案3

用您最喜欢的编程语言检查参数

xargs在您要执行的命令之间插入以下任何命令。

  1. ruby -e 'p ARGV'
  2. node -e 'console.log(process.argv)'
  3. python -c 'import sys; print sys.argv'

在这个答案中,我将用于ruby -e 'p ARGV'每个示例。

用法

假设您要调试脚本:

echo 1 2 3 4 | xargs echo

要调试,请放在ruby -e 'p ARGV'前面echo

echo 1 2 3 4 | xargs ruby -e 'p ARGV' echo
["echo", "1", "2", "3", "4"]

正如我们所看到的,很明显echo收到了 2 个参数。

这是另一个使用的示例-I

echo 1 2 3 4 | xargs -I@ ruby -e 'p ARGV' echo @
["echo", "1 2 3 4"]

现在我们知道echo只收到一个参数。

为什么不xargs -t -p

因为当命令参数中有空格时-t和确实很不明确,例如:-p

printf 'hello world\0goodbye world' | xargs -0 -t echo
echo hello world goodbye world
hello world goodbye world

当查看 时echo hello world goodbye world,很难判断是否echo收到了 2 个或 4 个参数。

通过使用该解决方案,很容易理解如何xargs处理每个参数:

printf 'hello world\0goodbye world' | xargs -0 ruby -e 'p ARGV' echo
["echo", "hello world", "goodbye world"]

相关内容