如何使用参数执行 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
则应假定该选项。