Bash中HereDoc精简脚本后参数未识别,求正确写法
问题分析与正确实现
你的精简思路没问题,但核心错误是把${PASSWORD}放进了第一个参数的here-doc里——这样expecto只会收到一个参数(包含${PASSWORD}文本和ssh命令的字符串),完全没拿到本该作为第二个参数的密码值,自然无法正常运行。
正确的精简写法
直接保留原逻辑的参数结构,只是去掉临时变量tmp,把命令替换直接作为第一个参数,第二个参数单独传递${PASSWORD}即可:
expecto "$(cat <<'EOT' ssh user@sv7247.xserver.jp EOT )" "${PASSWORD}"
为什么这样可行?
<<'EOT'的单引号会让here-doc内的内容完全不做变量展开,确保传给expecto的第一个参数就是纯ssh user@sv7247.xserver.jp命令;${PASSWORD}作为独立的第二个参数传递,expecto能正确识别到这个密码参数,和原脚本的逻辑完全一致,同时实现了精简。
如果想更简洁,甚至可以省略cat,用bash的here-string特性(适合bash专属环境):
expecto $'ssh user@sv7247.xserver.jp' "${PASSWORD}"
要是命令没有换行或特殊字符,直接用单引号包裹字符串更简单:
expecto 'ssh user@sv7247.xserver.jp' "${PASSWORD}"
内容的提问来源于stack exchange,提问作者k23j4
相关产品推荐
相关产品推荐

