![将bash脚本通过管道传输到bash时如何设置参数](https://linux22.com/image/145193/%E5%B0%86bash%E8%84%9A%E6%9C%AC%E9%80%9A%E8%BF%87%E7%AE%A1%E9%81%93%E4%BC%A0%E8%BE%93%E5%88%B0bash%E6%97%B6%E5%A6%82%E4%BD%95%E8%AE%BE%E7%BD%AE%E5%8F%82%E6%95%B0.png)
如何使用参数执行 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
则应假定该选项。