【发布时间】:2019-04-23 19:25:49
【问题描述】:
我正在尝试编写一个在远程机器上运行的脚本。
由于这个脚本很复杂,我将它的一部分分解为函数,然后使用typeset 复制到脚本中。
当我运行脚本时,我收到以下错误:
bash: -c: line 4: syntax error: unexpected end of file
但是,文件没有意外结束!我确保所有ifs 都有fis,所有{ 都有},等等。
我已确保所有缩进都使用制表符(和空格),并确保换行符一致。
我已将代码精简为一个最小示例。似乎要使函数有效,它需要以 if fi 或 while done 之类的结构结尾。
这就是不工作的地方。
func() {
ls ~/
}
ssh -A -T user@machine_ip '
'$(typeset -f func)'
func
'
第 4 行与 func 函数的结尾 } 重合(从 ssh -A -T... 之后开始计数行,因为此错误发生在远程计算机上)。
然而,如果我们在函数末尾添加一个构造,则主目录会按预期打印。
func() {
ls ~/
if [[ 1 ]]; then
echo "Hello"
fi
}
或
func() {
ls ~/
while false; do
echo "Here"
done
}
typeset -f func 的输出是
func ()
{
ls --color=auto ~/;
if [[ -n 1 ]]; then
echo "Hello";
fi
}
我运行的是 Ubuntu 18.04 LTS,远程机器运行的是 Centos 6。
【问题讨论】:
标签: linux bash shell ssh centos6