从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

回到顶部