바이너리와 스크립트를 실행하는 다른 방법


11

나는 한동안 리눅스를 사용하고 있었고 이것에 대한 완전한 개요를 찾고 있지만 아무것도 찾지 못했습니다.

스크립트와 이진 파일을 실행하는 다양한 방법을 찾지 못했습니다. 모두 큰 혼란이며 시행 착오를 통해 사용해야 할 것을 결정해야합니다. 스크립트 또는 바이너리 파일의 <script/binary>경우 다음 대안을 생각해 낼 수 있습니다.

<script/binary>
. <script/binary>
./<script/binary>
source <script/binary>
sh <script/binary>

(더 있나요?)

어떤 명령이 어떤 종류의 파일과 함께 작동하는지, 그리고 여러 옵션이있을 때의 차이점에 대한 완전한 개요를 제공 할 수 있습니까?

감사.

답변:


7

다음 명령은 동일합니다. 점 구성 요소는 "현재 디렉토리"를 의미합니다. 실행을 허용하려면 파일에 실행 권한이 있어야합니다.

path/to/binary
./path/to/binary

경로에 슬래시가 포함되어 있지 않으면 명령 (쉘 내장 또는 $PATH환경 변수 에서 조회 된 프로그램 )으로 취급됩니다.

다음은 거의 동일 하며 현재 쉘 환경에서 바이너리 스크립트가 아닌 쉘 스크립트 를 실행 합니다. 두 줄 사이의 작은 차이점은이 Unix.SE 질문 에 설명되어 있습니다.

. path/to/script
source path/to/script

마침내 당신은 언급했다 sh script. 다시, 이것은 바이너리 스크립트 가 아닌 쉘 스크립트 에서만 작동 합니다. 기본적으로 sh스크립트 이름을 인수로 사용 하여 프로그램을 실행하고 있습니다. 의 경우에는 sh이 인수를 쉘 스크립트로 취급하고 실행합니다.

쉘 스크립트로 제한되는 답변 은 쉘 스크립트를 실행하는 다양한 방법을 참조하십시오 .


3

모든 입력에 감사드립니다. 나는 지금 내 자신의 질문에 대답하고 스크립트와 바이너리를 실행할 수있는 다양한 가능성에 대한 완전한 가이드를 제공하려고 노력할 것이다. 편집하고 의견을 작성하면 완전하고 정확한 것을 얻을 수 있습니다. 내 제안은 다음과 같습니다.

처음에는 두 가지 사항이 있습니다.

  • 리눅스는 명령경로를 구분 합니다 . 명령 프롬프트에있는 그대로 만 입력하고, 실행하는 내장 또는 해당 바이너리 또는 $ PATH에서 스크립트를 찾기 위해 리눅스의 원인이됩니다.

  • Linux가 무언가를 경로로 해석하려면 슬래시 (/)가 하나 이상 있어야합니다. 예를 들어 ./myScript, ./꽤 중복되는 것처럼 보일 수 있습니다-Linux가 명령이 아닌 경로로 해석하도록해야합니다.

따라서 바이너리 또는 스크립트를 실행하기위한 옵션은 다음과 같습니다.

바이너리 실행 binary:

$ binary          # when 'binary' is on the PATH, or is a built-in
$ ./binary        # when 'binary' is not on the path but in the current directory
$ /home/me/binary # when 'binary' is not on the PATH, and not in the current dir

스크립트 실행 script:

달리 명시되지 않는 한 파일에 실행 권한이 있어야합니다.

$ script        # execute a script that is on PATH. Will be executed in a new shell.
                # The interpreter to use is determined by the she-bang in the file.
$ ./script      # execute a script that is in the current dir. Otherwise as above.
$ /a/dir/script # when the script is not on the PATH and not in current dir. 
                # Otherwise as above.
$ . script      # execute a script in the current dir. Will be executed in the
                # current shell environment.
$ source script # equivalent to the above *1
$ sh script     # executes 'script' in a new shell *2 (the same goes for 'bash ...',
                # 'zsh ...' etc.). Execute permission not neccessary.

그녀에 대해 :

#!/bin/sh첫 줄에 she-bang이있는 스크립트 (예 :) 는 사용할 인터프리터를 알려줍니다.

  • 이 인터프리터는 ./script명령에 의해 또는 명령을 사용할 때 사용됩니다 script( scriptPATH에 있어야 함).
  • 를 사용하면- sh script을 무시하고이 경우 sh통역사로 사용합니다.
  • she-bang을 사용 . script하거나 source무시하고 현재 인터프리터를 사용합니다 ( 현재 쉘에서 스크립트의 각 행을 실행하는 것과 같 .거나 source이에 해당)

각주

* 1 : 이것은 거의 사실입니다. 배쉬에서 그들은 실제로 같은 명령하지만, 사용하는 경우 source, script$ PATH에서 검색됩니다 전에 현재 디렉토리. 그것은 bash이지만 POSIX 전용 셸에서는 source작동하지 않지만 작동 .합니다. 따라서 이식성을 위해 후자를 사용하십시오.

* 2 : 실제로 'script'를 인자로 사용하여 바이너리 sh를 실행하면 새로운 쉘에서 'sh'가 'script'를 실행하게됩니다.


2

다음은 간단한 명령 목록입니다. PATH를 언급 할 때 시스템이 알고있는 프로그램을 포함하는 디렉토리를 의미합니다. 을 가진 사람들을 찾으면 echo $PATH다음과 같습니다./home/mike/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

스크립트

  • 현재 작업 디렉토리에서 스크립트를 실행하려면 ./myscript.sh
  • 다른 파일에서 스크립트를 실행하려면 (현재 작업 디렉토리에있는 경우)를 사용하십시오. ./myscript.sh textfile.txt
  • 스크립트는 인수와 함께 실행할 수도 있습니다. Rute (p. 68)에 설명 된대로 : shebang 이후이 스크립트의 내용이 다음과 같으므로 myfile.sh dogs cats birds출력됩니다 The first argument is: dogs, second argument is: cats, third argument is: birds.echo "The first argument is: $1, second argument is: $2, third argument is: $3"

  • 다른 디렉토리에서 스크립트를 실행하려면 ~/Scripts/dogs.sh

  • 홈 디렉토리의 bin 폴더에 있기 때문에 시스템이 알고있는 스크립트를 실행하려면 (PATH에 자동으로 추가되므로 스크립트가없는 경우 작성하십시오) scriptname
  • 설치 한 스크립트를 실행하려면 시스템에 알려지기 때문에 해당 이름 만 다시 사용하십시오. 예를 들어, get_iplayer

이진

  • $ PATH에 있기 때문에 시스템이 알고있는 바이너리를 실행하려면 프로그램 이름과 매개 변수를 사용하십시오 (예 : vlc <stream url to open>
  • / usr / local / bin에 설치하기 전에 컴파일 한 바이너리를 테스트하거나 독립형 프로그램을 시스템에서 멀리 유지하려면 ~/<folder>/app/myprog

정보 주셔서 감사합니다. 이 문장이 맞습니까? : PATH가 아닌 스크립트 또는 바이너리를 실행하려면 단순히 경로를 지정하십시오. 현재 경로의 스크립트에 ./가 필요한 이유는 'script.sh'만 하나 이상의 슬래시 /가 없기 때문에 명령으로 해석되기 때문입니다.
Carl

"설치 한 스크립트를 실행하려면" "설치 한 스크립트"는 무엇입니까? 이 점이 이전 점과 동일하다고 말합니까?
Carl

@ Carl- 첫 번째 의견은 정확하지만 스크립트에 대한 마지막 두 가지 사항이 같다고 말하는 것은 사실이 아닙니다. 스크립트 섹션의 포인트 5에서 사용자가 홈 디렉토리의 bin 폴더에 수동으로 추가 한 스크립트에 대해 이야기했습니다. 포인트 6에서 나는 저장소에서 설치하고 항상 사용자의 홈 디렉토리가 아닌 시스템 폴더로 이동하는 get_iplayer와 같은 스크립트에 대해 이야기했습니다.

죄송하지만 여전히 ~ / bin / (PATH에 있음) 또는 시스템 폴더 (PATH에 있음)의 스크립트를 이해하지 못합니다. 어떻게 차이점이 있습니까? 그들은 다르게 행동합니까?
Carl

~ / bin에서 사용자가 소유하고 추가하는 스크립트와 시스템 폴더에서 루트가 소유 한 스크립트를 구별했습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.