You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中如何将管道内容传入含SSH的变量并正确执行?

在Bash中用变量存储命令并在管道中使用的问题解决

你的代码出错是因为字符串变量存储带引号的命令时,展开后引号会被当作普通字符处理,导致远程执行时tee -a Log/my.log被拆成了'tee、-a、Log/my.log'三个部分,系统找不到名为'tee的命令。

下面是几种可行的解决办法:

方法1:使用函数(推荐)

用函数封装命令,能完美保留参数结构,避免引号解析问题:

mycommand() {
  ssh user@host 'tee -a Log/my.log'
}
echo "Hello" | mycommand

方法2:使用数组存储命令

如果需要动态构建命令参数,用数组存储每个部分,展开时用"${数组名[@]}"保证参数正确传递:

MYCOMMAND=(ssh user@host 'tee -a Log/my.log')
echo "Hello" | "${MYCOMMAND[@]}"

方法3:使用eval(不推荐,注意安全)

如果一定要用字符串变量,可通过eval强制解析引号,但eval会执行任意传入的代码,存在安全风险,仅在明确无风险场景下使用:

MYCOMMAND="ssh user@host 'tee -a Log/my.log'"
echo "Hello" | eval "$MYCOMMAND"

内容的提问来源于stack exchange,提问作者Blazzter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:02:37