将bash脚本通过管道传输到bash时如何设置参数

将bash脚本通过管道传输到bash时如何设置参数

如何使用参数执行 bash 脚本:

./foo.sh a b c

当它被压缩时(例如使用xz)。

 xzcat foo.sh | bash <<how_to_supply_here_parameters?>>

具体用例:

我生成了非常大的rmlint.sh文件并将其压缩存储:

time rmlint -o sh:stdout -c sh:hardlink|tee >( xz > rmlint.sh.xz )

因此我通常会执行

./rmlint.sh -d -x -p

但是,文件太大,无法解压。因此,我很想通过管道将其传输到 bash 来完成同样的操作:

xzcat rmlint.sh.xz | bash ...

答案1

您应该使用-s选项 and--来分隔要传递的参数:

echo 'echo "$@"' | sh -s 3 4 5

echo 'printf "{%s}" "$0"; printf " {%s}" "$@"; echo' |
    sh -s -- -d -x -p --foo=bar
{sh} {-d} {-x} {-p} {--foo=bar}

这应该适用于任何 POSIX shell,而不仅仅是bash.从苏斯病毒4:

-s 从标准输入读取命令。

如果没有操作数且未-c指定选项,-s 则应假定该选项。

相关内容