【发布时间】:2017-01-24 16:11:33
【问题描述】:
我有这样的命令:
ssh user@hostname 'sed -e "s|foo|${bar}|" /home/data/base_out.sql > /home/data/out.sql'
sed 命令在本地 shell 中运行。但它并没有通过 ssh 命令扩展变量。谢谢!
【问题讨论】:
标签: shell ssh command-line sed terminal
我有这样的命令:
ssh user@hostname 'sed -e "s|foo|${bar}|" /home/data/base_out.sql > /home/data/out.sql'
sed 命令在本地 shell 中运行。但它并没有通过 ssh 命令扩展变量。谢谢!
【问题讨论】:
标签: shell ssh command-line sed terminal
规则是在单引号内,参数不展开。整个命令周围有单引号。
试试这个:
ssh user@hostname "sed -e 's|foo|$bar|' /home/data/base_out.sql > /home/data/out.sql"
现在 $bar 在命令字符串作为参数传递给 ssh 之前被扩展,这就是你想要的。
我删除了${bar} 周围的花括号,因为我认为它们提供了一种虚假的安全感。在这种情况下,它们不会保护您免受与using shell variables in sed commands 相关的任何问题。
【讨论】: