명령을 실행하려고 하지 않는데도 이유 없이 "명령을 찾을 수 없습니다"

명령을 실행하려고 하지 않는데도 이유 없이 "명령을 찾을 수 없습니다"

스크립트를 실행하려고 할 때 발생하는 오류입니다.

~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은 입니다 Finder. menubar은 내가 스크립트에 전달하는 매개변수입니다 $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

내 경험상 이와 같은 문제는 코드에서 한두 줄을 찾아 내가 엉망으로 만든 부분을 찾으면 해결될 수 있습니다.

방금 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

따라서 작성된 코드는 좋아 보이지만 문제가 있을 수 있습니다.

관련 정보