在远程 ssh 主机的 case 语句中使用heredoc

在远程 ssh 主机的 case 语句中使用heredoc

我有一个要在远程服务器上运行的 ssh 命令列表,所以写了这个片段。

#!/usr/bin/env bash


echo ''
echo "WOULD YOU LIKE TO PERFORM FILES CLEANUP: "
read choice


case $choice in
  yes|YES|y|Y )

    echo ''
    echo "Enter NAME OR IP OF REMOTE HOST: "
    read ls_host


    ssh -t ${ls_host} <<- IFF
      command 1
      command 2
      command 3
    IFF;;
  * )
    echo "YOU'VE MADE A WISE-CHOISE: SCRIPT IS SKIPPING CLEANUP";;
esac

低于错误

warning: here-document at line # delimited by end-of-file (wanted `IFF')

我也尝试过围绕 IFF 引用

答案1

Here-docs 是在正常语法“之外”收集的,仅基于输入行。因此,您需要将here-doc分隔符放在自己的一行上,并且不能将其与其他语法结合使用。另外,here-doc 分隔符本身可以包含语法元素,就像这样;;......

例如,这应该打印wathi, hello

#!/bin/sh

cat << "EOF;;"
wat
EOF;;

case x in 
 x) cat <<-EOF
        hi, hello
        EOF
    ;;
 y) false;;
esac

请注意,您需要在第二个EOF和该hi, hello行之前使用硬制表符,并且由于 stackexchange 将制表符更改为空格,直接复制粘贴不行。这可能是也可能不是避免避免的论据<<-,而只是将此处的文档数据推到左边缘。


read ls_host; ssh -t ${ls_host}允许用户ssh在输入主机名时输入选项,这可能是也可能不是您想要的。可能也想"${ls_host}"在那里使用。

相关内容