从stdin运行脚本命令,带有参数
我有一个更复杂的shell脚本的小帮手脚本的集合,尽管这很有效,但我决定由于各种原因而想将它们缩减为一个脚本。从stdin运行脚本命令,带有参数
所以我想我会在这里使用文档,以便我可以创建“嵌套的”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
将参数强制转换为脚本字符串,但这不是一个很好的方法。
对于那些想知道的;我试图这样做的原因是我的嵌套脚本可能在本地运行,也可能是远程运行,具体取决于是否提供了主机。我真的不想在远程主机上创建文件来运行,而只是远程运行命令,这种方法看起来好像会启用(如果我可以像我想要的那样让它工作)。
回答:
使用sh -s
:
echo "$nested_script" | sh -s "foo" "bar"
你也可以已通过脚本作为参数与-c
:
sh -c "$nested_script" -- "foo" "bar"
这样就减少了脚本的标准输入。
以上是 从stdin运行脚本命令,带有参数 的全部内容, 来源链接: utcz.com/qa/258968.html