![Bash 第 11 行出现“意外的文件结束”,但实际上没有第 11 行](https://linux22.com/image/1128302/Bash%20%E7%AC%AC%2011%20%E8%A1%8C%E5%87%BA%E7%8E%B0%E2%80%9C%E6%84%8F%E5%A4%96%E7%9A%84%E6%96%87%E4%BB%B6%E7%BB%93%E6%9D%9F%E2%80%9D%EF%BC%8C%E4%BD%86%E5%AE%9E%E9%99%85%E4%B8%8A%E6%B2%A1%E6%9C%89%E7%AC%AC%2011%20%E8%A1%8C.png)
我正在 Lubuntu 系统上尝试一个新的 conky 主题,为了运行它,我需要启动一个 bash 脚本:
#!/bin/bash
#sleep 18&&
conky -c /home/mathijs/conky/conky1&&
sleep 1&&
conky -c /home/mathijs/conky/conky2&&
sleep 1&&
conky -c /home/mathijs/conky/conky3&&
sleep 1&&
conky -c /home/mathijs/conky/conkyxx&&
sleep 1&&
当我运行脚本时,终端出现以下错误:
./start.sh: line 11: syntaxerror: unexpected end of file
但脚本中只有 10 行。我手写重写并再次检查,但仍然出现相同的错误。我遗漏了什么?
答案1
shell 元字符&&
期望随后有一个命令,如果第一个命令成功执行,该命令就会运行。
这就是您收到错误消息的原因。
例如sleep 1&&
,在第 10 行,shell 将运行sleep 1
,然后如果成功(退出代码 0),则 ( &&
) 将运行下一个命令,而该命令不是由您提供的。因此,您将收到一条unexpected end of file
错误消息。
另外我认为您的意思是使用&
而不是&&
。
&
将前台进程移至后台,这样您就可以在前台执行其他操作。另外,这可能不是sleep
命令的好主意(但取决于用例),因为它sleep
旨在暂停脚本或终端中命令的执行,持续时间为上述时间,如果您通过添加将其移至后台,&
例如,sleep 1&
下一个命令将立即运行,因为在这种情况下执行顺序不会同步。
答案2
最后一个命令sleep 1&&
期望有其他的东西。
如果删除最后一个&&
,则不会出现错误。