ZSH 命令在 shell 中运行,但不在脚本中

Dan*_*der 2 zsh shell-script

我在终端中运行这个 zsh 链式命令:

cd /path/to/backups/pod3 && rm -rf ./*(Om[1,-10])
Run Code Online (Sandbox Code Playgroud)

这工作正常并按预期删除适当的目录。

但是,当我将其放入脚本时,出现此错误:

syntax error near unexpected token `('
Run Code Online (Sandbox Code Playgroud)

我做了一些研究,似乎我需要在我的 shell 脚本中设置它:

setopt extended_glob
Run Code Online (Sandbox Code Playgroud)

但是,在脚本顶部添加该行后,它会引发自己的错误。

setopt: command not found
Run Code Online (Sandbox Code Playgroud)

所以我不确定我在这里做错了什么以及如何解决这个问题。

Sté*_*las 5

您需要在脚本中添加一个 she-bang 来告诉系统该脚本必须由 解释zsh,否则它将被解释为sh

#! /bin/zsh -
cd /path/to/backups/pod3 && rm -rf ./*(Om[1,-10])
Run Code Online (Sandbox Code Playgroud)

更改/bin/zshzsh可执行文件的实际路径,或将整个 she-bang 行更改为:

#! /usr/bin/env zsh
Run Code Online (Sandbox Code Playgroud)

对的路径zsh中要查找$PATH(假设env命令是在/usr/bin这是在大多数系统的情况下)。