我有一个要在远程服务器上运行的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上引用
发布于 2022-04-20 11:15:30
这里-文档收集“外部”的正常语法,仅基于输入行。因此,您需要在它自己的一行上使用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将选项卡更改为空格,所以copypasting直接不能使用。这可能是也可能不是避免<<-的论点,而只是将here-doc数据推到左边的边缘。
此外,read ls_host; ssh -t ${ls_host}允许用户在输入主机名时向ssh输入选项,这可能是您想要的,也可能不是您想要的。可能也想在那里使用"${ls_host}"。
https://unix.stackexchange.com/questions/699687
复制相似问题