在一行上运行具有相同参数的两个命令

在一行上运行具有相同参数的两个命令

我需要逐行解析文件并将在其中找到的值传递给 FreeBSD 中的 2 个命令sh(不能使用其他 shell)。

我的计划是使用xargsand su

whatever_outputs_values | xargs -I {} su `whoami` -c "cmd1 {}; cmd2 {}"

因为在 FreeBSD 中,su同一用户使用时不需要密码。这在终端中执行得很好并产生正确的结果,尽管速度很慢。但我必须在程序代码中运行它,并且该命令挂起。我 99% 确信它会挂起,因为由于我看不到的情况,SSH 库导致它等待密码输入。因此,我正在寻找 的替代方案su whoami,保证不等待密码。它可能可能是一个for循环,但来自 Linuxbash背景的我无法设计一个工作for循环sh

答案1

我不会用su这个,但是sh -c。这将使它变得便携并且可能更快一些。我还会避免注入左侧命令的输出作为代码进入右侧的shell命令(这是一个代码注入漏洞)。

some-command | xargs -I {} sh -c 'cmd1 "$1"; cmd2 "$1"' sh {}

这会多次调用内联sh -c脚本,每次都使用一个参数。该参数用于调用cmd1and cmd2

sh参数是一个“虚拟”参数,将传递到$0内联脚本内部。这应该是脚本或 shell 的名称,并且将在 shell 生成的任何错误消息中使用它(例如找不到命令时等)

相关内容