我有一个小帮助程序脚本的集合,用于更复杂的shell脚本,虽然这很好用,但我还是决定将其简化为一个脚本,原因有很多。
所以我想我会在这里使用文档,以便我可以创建“嵌套”shell脚本,以便在本地或远程运行。这很有效,因为我可以做到以下几点:
#!/bin/sh
nested_script=$(cat << 'NESTED_SCRIPT'
# Script commands
NESTED_SCRIPT
)
echo "$nested_script" | sh
不是最具功能性的示例,但我可以将其发送到ssh
,这使得它非常有用。
然而,我遇到的问题是我无法弄清楚如何为嵌套脚本提供参数,就好像我向sh
命令添加任何东西然后它将其解释为一个文件到完全运行并忽略标准输入。
在我的本地计算机上,我可以echo "$script" | sh /dev/stdin "foo" "bar"
完成它,但我不相信我正在使用的远程计算机支持以这种方式使用/dev/stdin
。
还有其他解决方案吗?目前我正在使用sed
强制参数进入脚本字符串,但这不是一个非常好的方法。
对于那些想知道的人;我试图这样做的原因是我的嵌套脚本可能在本地运行,或者可能是远程运行,具体取决于是否提供了主机。我真的不想在远程主机上创建文件来运行,而只是想远程运行这些命令,这种方法似乎可以启用(如果我能让它像我想的那样工作)。
答案 0 :(得分:6)
使用sh -s
:
echo "$nested_script" | sh -s "foo" "bar"
您也可以将脚本作为参数传递给-c
:
sh -c "$nested_script" -- "foo" "bar"
这释放了脚本的标准输入。