命令在脚本(或 -c)中有效,但在直接运行时无效(在交互式 shell 中)

命令在脚本(或 -c)中有效,但在直接运行时无效(在交互式 shell 中)

这有效:

$ bash -c 'while true; do echo foo; sleep 1; done'
foo
foo
...

但不是这个:

$ while true; do echo foo; sleep 1; done
bash: syntax error near unexpected token `done'

我在 zsh 上看到同样的问题:

zsh:“完成”附近解析错误

注意:破折号有效。

答案1

像这样的问题经常被误解,因为很少有人意识到它aliases在非交互式 shell 中被禁用。

在您的情况下,是一个名为 name 的别名do导致了问题。

要调查类似的问题,通常可以使用以下命令启动新的 shell:

HOME=/tmp $shell

然后再试一次。这可以避免交互式 shell 读取启动脚本。

相关内容