我有一组用于更复杂的 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
但这不是一个很好的方法。
对于那些想知道的人;我尝试这样做的原因是我的嵌套脚本可能在本地运行,也可能在远程运行,具体取决于是否提供了主机。我真的不想在远程主机上创建要运行的文件,而是只想远程运行命令,这种方法似乎可以启用(如果我可以让它像我想要的那样工作)。