@Artem S. Tashkinov가 제안한 스크립트를 사용했습니다."나는 이것을 직접 작성했지만 콘솔에서 실행됩니다."
$sh raw_io.sh:
20: shopt: not found
raw_io.sh:
48: declare: not found
raw_io.sh:
61: Syntax error: redirection unexpected
나는 그것을 실행 가능하게 만들고 두 번 클릭한 다음 "터미널에서 실행"해야 한다는 것을 알았습니다.
새로고침 중이므로 출력을 복사/붙여넣을 수 없습니다. 그래서 스크린샷을 만들었습니다:
더블클릭으로 실행되는데 "터미널에서 실행"을 눌러야 하는데, 터미널에서 직접 실행하는 방법도 알고 싶습니다.
~/Desktop$ raw_io
raw_iso: command not found
그렇다면 이러한 시작 방법의 차이점은 무엇입니까?
답변1
라는 스크립트를 실행하는 방법은 무엇입니까 myscript
?
sh myscript # Or sh /path/to/myscript
bash myscript # Or bash /path/to/myscript
perl myscript # Or perl /path/to/myscript
python myscript # Or python /path/to/myscript
등.
이는 매우 간단하지만 스크립트를 실행하는 데 어떤 인터프리터를 사용해야 하는지 알아야 하며, 잘못된 인터프리터를 사용하려고 하면 오류가 발생한다는 사실을 확인했습니다(대신 을 사용하는 등 sh
) bash
.
더 나은 방법은 스크립트가 올바른 인터프리터 자체를 선언하도록 하는 것입니다. 이는 #!
첫 번째 줄의 정의를 사용하여 수행됩니다. 예를 들어, 다음 줄은 bash
(특히 /bin/bash
) 인터프리터로 선언합니다 .
#!/bin/bash
이 기능을 사용하려면 스크립트를 실행 가능하게 만들어야 합니다.
chmod a+x myscript
그런 다음 지정된 콜론으로 구분된 디렉터리 목록 중 하나에 있는 한 $PATH
다른 프로그램처럼 실행할 수 있습니다. 해당 이름만 사용하면 됩니다.
myscript
그러나 현재 디렉터리( 로 표시됨 .
)는 해당 디렉터리에 없으므로 $PATH
현재 디렉터리에서 스크립트를 처리하는 경우 해당 스크립트를 찾을 수 있도록 경로를 제공해야 합니다. 이것이 .
나타내는 것은현재 디렉터리현재 작업 디렉터리(즉, 동일한 위치)에 대한 상대 경로입니다.
./myscript # Or /full/path/to/myscript
.
일반적으로 에 없는 데는 그럴 만한 이유가 있지만 꼭 추가해야 한다면 처음이 아닌 $PATH
끝에 넣으세요 . $PATH
(바라보다UNIX 기록에는 $PATH의 현재 디렉터리가 포함되지 않습니다.그리고왜 그렇습니다. 기본적으로 경로에 없나요?.)
스크립트 이름이나 확장자는 중요하지 않습니다(사용하게 될 명령 이름이 test
에 나열된 시스템 디렉토리에 이미 존재하지 않는 한 $PATH
). myscript
여기서는 이것을 예로 사용하겠습니다 . 원하시면 사용해도 되고, 사용해 myscript.sh
도 되지만 confusion.png
그렇지 않으니 ls.exe
꼭 필요하다고는 생각하지 않습니다 myscript.sh
. 그러나 일부 GUI에서는 파일 확장자를 사용하여 파일 내용을 추측할 수 있으며 png
비표준 방식(예: 스크립트)으로 확장자를 사용하면 혼동을 일으킬 수 있습니다. GUI가 파일의 내용을 식별하는 올바른 방법은 다음 명령과 동등한 것을 사용하는 것이지만 file
모든 방법이 이 명령을 수행하는 것은 아닙니다.
file myscript
마지막 으로 스크립트 작업을 마치고 다시 사용하려고 $PATH
하면 . 내 경우에는 를 사용했지만 .ls
cp
$HOME/bin
$PATH