我有一个要在远程服务器上运行的 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 分隔符本身可以包含语法元素,就像这样;;
......
例如,这应该打印wat
和hi, 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}"
在那里使用。