Grz*_*cki 6 bash pipe shell-script
如何使用参数执行 bash 脚本:
./foo.sh a b c
Run Code Online (Sandbox Code Playgroud)
当它被压缩时(例如使用xz)。
xzcat foo.sh | bash <<how_to_supply_here_parameters?>>
Run Code Online (Sandbox Code Playgroud)
具体用例:
我制作了非常大的rmlint.sh文件并将其压缩存储:
time rmlint -o sh:stdout -c sh:hardlink|tee >( xz > rmlint.sh.xz )
Run Code Online (Sandbox Code Playgroud)
因此我通常会执行
./rmlint.sh -d -x -p
Run Code Online (Sandbox Code Playgroud)
但是,文件太大无法解压缩。因此,我很乐意通过管道将其传递给 bash 来做同样的事情:
xzcat rmlint.sh.xz | bash ...
Run Code Online (Sandbox Code Playgroud)
mos*_*svy 16
您应该使用-s选项和--分隔要传递的参数:
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}
Run Code Online (Sandbox Code Playgroud)
这应该适用于任何 POSIX shell,而不仅仅是bash. 从susv4:
-s从标准输入读取命令。如果没有操作数
-c且未指定-s选项,则应假定选项。
| 归档时间: |
|
| 查看次数: |
4207 次 |
| 最近记录: |