コマンドを実行しようとしていませんが、理由なく「コマンドが見つかりません」

コマンドを実行しようとしていませんが、理由なく「コマンドが見つかりません」

スクリプトを実行しようとしたときに発生するエラーです。

~bin/killp: line 7: [[ menubar: command not found
~bin/killp: line 11: [[ menubar: command not found
~bin/killp: line 11:  [[: command not found
~bin/killp: line 15: [[ menubar: command not found
~bin/killp: line 15:  [[: command not found
~bin/killp: line 15:  [[ menubar: command not found
~bin/killp: line 19: conditional binary operator expected
~bin/killp: line 19: syntax error near `Dock'
~bin/killp: line 19: `if [[ $1 == Dock ]]; then'

これらのラインはこんな感じです。

if [[ $1 == Desktop ]] || [[ $1 == Finder ]]; then
killall Finder
fi

唯一の違いDesktopはですFindermenubarは私がスクリプトに渡すパラメータです$1

答え1

エラーメッセージによれば、スクリプトに切り捨て防止の空白文字が隠されている可能性があります(例:- 入力space)。

たとえば、エラーは実際には次のようになります。

~bin/killp: line 7: [[@menubar: command not found
~bin/killp: line 11: [[@menubar: command not found
~bin/killp: line 11: @[[: command not found
~bin/killp: line 15: [[@menubar: command not found
~bin/killp: line 15: @[[: command not found
~bin/killp: line 15: @[[@menubar: command not found
~bin/killp: line 19: conditional binary operator expected
~bin/killp: line 19: syntax error near `Dock'
~bin/killp: line 19: `if [[ $1 == Dock ]]; then' <-- Somewhere, not sure where.

見えない文字を@に置き換えました。

答え2

私の経験では、このような問題は、コード内の1〜2行を見つけて、私が混乱させた部分を見つけると解決することができます。

私はvim(killallの代わりにechoを使用)を使ってMacに提供したものを入力しましたが、次のように正しく機能しました。

$ more test.sh
#!/bin/sh

if [[ $1 == Desktop ]] || [[ $1 == Finder ]]; then
    echo "Finder"
fi

cygwinを実行しているWindowsマシンで:

petro@<blur> ~
$ ./test.sh

petro@<blur> ~
$ ./test.sh stuffing

petro@<blur> ~
$ ./test.sh Finder
Finder

したがって、書かれたコードはよく見えますが、問題がある可能性があります。

関連情報