"sh 명령"과 실행 파일로 실행하는 것의 차이점은 무엇입니까?

"sh 명령"과 실행 파일로 실행하는 것의 차이점은 무엇입니까?

@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하면 . 내 경우에는 를 사용했지만 .lscp$HOME/bin$PATH

관련 정보