ZSH コマンドはシェルで実行されますが、スクリプトでは実行されません。

ZSH コマンドはシェルで実行されますが、スクリプトでは実行されません。

端末でこのzsh linkコマンドを実行します。

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

これはうまく機能し、期待どおりにそのディレクトリを削除します。

ただし、スクリプトに入れると、次のエラーが発生します。

syntax error near unexpected token `('

いくつかの調査を行った結果、シェルスクリプトでこれを設定する必要があるようです。

setopt extended_glob

ただし、スクリプトの上部に対応する行を追加すると、独自のエラーが発生します。

setopt: command not found

だからここで私が何を間違っているのか、どうすれば解決するのかわかりません。

答え1

スクリプトがによって解釈される必要があることをシステムに通知するには、スクリプトにシェーバンを追加する必要があります。zshそれ以外の場合は、次のように解釈されます。sh

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

/bin/zsh実行可能ファイルの物理パスに変更するzshか、she-bang 行全体を次のように変更します。

#! /usr/bin/env zsh

zsh照会に使用するパス$PATH(ほとんどのシステムにenvコマンドがあると仮定/usr/bin)。

関連情報