使用参数从stdin运行脚本命令

Har*_*ikk 4 ssh shell

我有一个小帮助程序脚本的集合,用于更复杂的shell脚本,虽然这很好用,但我还是决定将其简化为单个脚本,原因有很多.

所以我想我会在这里使用文档,以便我可以创建"嵌套"shell脚本,以便在本地或远程运行.这很有效,因为我可以做到以下几点:

#!/bin/sh
nested_script=$(cat << 'NESTED_SCRIPT'
    # Script commands
NESTED_SCRIPT
)
echo "$nested_script" | sh
Run Code Online (Sandbox Code Playgroud)

不是最具功能性的例子,但我可以发送它的事实ssh使它非常有用.

但是,我遇到的问题是我无法弄清楚如何为嵌套脚本提供参数,就好像我向sh命令添加任何内容然后它将其解释为要运行的文件并完全忽略标准输入.

在我的本地机器上,我可以做到echo "$script" | sh /dev/stdin "foo" "bar"并且它可以完美地工作,但我不相信我正在使用的远程机器支持/dev/stdin这种方式的使用.

还有其他解决方案吗?目前我正在使用脚本字符串强制参数,sed但这不是一个非常好的方法.

对于那些想知道的人; 我试图这样做的原因是我的嵌套脚本可能在本地运行,或者可能是远程运行,具体取决于是否提供了主机.我真的不想在远程主机上创建文件来运行,而是只是远程运行命令,这种方法似乎可以启用(如果我可以让它像我想的那样工作).

tha*_*guy 7

用途sh -s:

echo "$nested_script" | sh -s "foo" "bar"
Run Code Online (Sandbox Code Playgroud)

您也可以将脚本作为参数传递-c:

sh -c "$nested_script" -- "foo" "bar"
Run Code Online (Sandbox Code Playgroud)

这释放了脚本的标准输入.