【问题标题】:Trying to cd in ssh heredoc [duplicate]试图在 ssh heredoc 中 cd [重复]
【发布时间】:2020-04-24 20:42:40
【问题描述】:

我正在编写一个启动ssh会话然后在远程服务器上执行截图的脚本,脚本如下。

numbah="$1"
. . . . 
# Taking the screenshot
ssh -x ${INPUT_USER}@nano-machine /bin/bash <<- EOF
  cd /tmp
  mkdir --parents -- temp_img && cd -- $_
  DISPLAY=:0 scrot "Screenshot-${numbah}_%d-%m-%Y.png"
  echo "first arg is $1 $1 $1"
EOF

代码块似乎产生了错误,导致scrot 失败。

/bin/bash: line 2: cd: /bin/bash: Not a directory

但如果我引用EOF,则根本不会出现错误——除了变量不会扩展,这对这个脚本至关重要。

如何在保持变量完整/可扩展的同时消除错误?

【问题讨论】:

标签: bash variables heredoc


【解决方案1】:

如何在保持变量完整/可扩展的同时消除错误?

禁用此特定变量的扩展。记住引号。

ssh -x ${INPUT_USER}@nano-machine /bin/bash <<- EOF
  cd /tmp
  mkdir --parents -- temp_img && cd -- "\$_"
  DISPLAY=:0 scrot "Screenshot-${numbah}_%d-%m-%Y.png"
  echo "first arg is $1 $1 $1"
EOF

但我确实发现,对于复杂的脚本,将数据作为参数传递并且脚本根本不展开会更容易:

ssh -x ${INPUT_USER}@nano-machine /bin/bash -- "$numbah" <<-'EOF'
  cd /tmp
  mkdir --parents -- temp_img && cd -- "$_"
  DISPLAY=:0 scrot "Screenshot-${1}_%d-%m-%Y.png"
  echo "first arg is $1 $1 $1"
EOF

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 2016-08-04
    • 2018-07-09
    • 2016-08-14
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多