【发布时间】:2013-07-05 01:21:37
【问题描述】:
我有一组用于更复杂的 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 将参数强制到脚本字符串中,但这不是一个很好的方法。
对于那些想知道的人;我尝试这样做的原因是我的嵌套脚本可能在本地运行,也可能在远程运行,具体取决于是否提供了主机。我真的不想在远程主机上创建文件来运行,而是只想远程运行命令,这种方法似乎可以启用(如果我可以让它像我想要的那样工作的话)。
【问题讨论】: