gpt4 book ai didi

shell - 从标准输入运行脚本命令,带参数

转载 作者:行者123 更新时间:2023-12-04 23:55:11 24 4
gpt4 key购买 nike

我有一组用于更复杂的 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 强制将参数输入到脚本字符串中但这不是一个很好的方法。

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

最佳答案

使用 sh -s :

echo "$nested_script" | sh -s "foo" "bar"

您也可以将脚本作为参数传递给 -c :
sh -c "$nested_script" -- "foo" "bar"

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

关于shell - 从标准输入运行脚本命令,带参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17514292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com