sh 및 ./를 사용하여 bash 스크립트를 실행하는 것의 차이점은 무엇입니까?

이 같은 질문은 bash 스크립트뿐만 아니라 모든 유형의 스크립트를 사용할 때 발생할 수 있습니다. 인터프리터를 통해 스크립트를 실행하는 것과 직접 실행하는 것 사이에 큰 차이가 있습니까?

Let 's Use Linux (uL)의이 흥미로운 게시물에서 밝혀 낼 또 하나의 미스터리입니다.


스크립트의 파일 이름을 인터프리터 (sh, python, perl 등)에 전달하여 스크립트를 실행할 때 실제로 인터프리터를 실행하고 실행하려는 프로그램을 인수로 전달합니다. 예를 들어 sh 인터프리터는 miscript.sh 인수를 전달하여 실행합니다.

sh myscript.sh

스크립트를 단독으로 실행하면 시스템이 필요한 인터프리터를 호출 한 다음 예, 스크립트를 실행하여 인터프리터에 인수로 전달하지만 스크립트를 실행 한 사용자가 알지 못하는 사이에 모두 자동으로 실행됩니다.

./미스크립트.sh

스크립트를 단독으로 실행하려면 다음 두 가지 조건이 충족되어야합니다.

1) 스크립트에는 "뱅 라인"이 포함되어야합니다. 이것은 #! 문자로 시작해야하는 스크립트의 첫 번째 줄입니다. 인터프리터가있는 경로를 지정해야합니다. 이 조건은 bash의 스크립트뿐만 아니라 모든 유형의 스크립트 (python, perl 등)에 적용된다는 점에 유의해야합니다.

따라서 예를 들어 스크립트는 첫 번째 줄에 다음을 포함해야합니다.

#! / bin / bash

2) 파일에 실행 권한이 있어야합니다.

스크립트에 실행 권한을 부여하려면 다음을 작성해야합니다.

chmod a + x miscript.sh

준비, 이제 다음과 같이 실행하십시오.

./미스크립트.sh

또는 스크립트를 쉽게 호출 할 수있는 "특수"경로에 복사합니다. 예를 들어, / usr / sbin에 복사하여 위치하는 전체 경로를 포함하지 않고 어디에서나 실행할 수 있습니다.

우리는 복사합니다 :

sudo cp miscript.sh / usr / sbin / miscript

우리는 다음을 실행합니다.

Miscript

보시다시피 실제로이면에서 일어나는 일은 두 경우 모두 매우 유사합니다. 그러나 "뱅 라인"을 포함하면 스크립트를 실행하기 위해 필요한 인터프리터가있는 경로를 기억할 필요가 없기 때문에 스크립트를 훨씬 쉽게 배포 할 수 있습니다. 결론 : 기본적으로 편안함의 문제입니다.


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   Oswaldo Villarroel

    나는 당신의 Erpower에 동의합니다. 인터프리터의 버전과 경로는 모두 가변적이며 일정하지 않습니다. , Mac) 및 그들 중 다수는 다른 구성 또는 경로를 가지고 있습니다.

    중요한 것은 ./ 또는 sh (또는 python ... 등)를 사용하여 스크립트에 대한 호출을 수행 할 수있는 유연성 (잘 언급했듯이)이 있음을 아는 것입니다.

  2.   he_who_knows@gmail.com

    Bash는 주문을 해석하는 기능을 가진 컴퓨터 프로그램입니다.

    Unix 셸을 기반으로하며 POSIX를 준수합니다.

    대신 sh는 주문을 해석하는 기능을 가진 컴퓨터 프로그램입니다.
    프로세스 제어, 리디렉션과 같은 기능 통합
    입력 / 출력, 파일 목록 및 읽기, 보호,
    프로그램 작성을위한 통신 및 명령 언어
    배치 또는 스크립트. 이것은 Unix의 첫 번째 버전에서 사용 된 인터프리터였으며 사실상 표준이되었습니다.

  3.   다이아나 C

    안녕하세요, 저는 스크립트 사용의 초보자이며 누군가 제가 가진 문제에 대해 저를 도울 수 있는지 알고 싶습니다.

    콘솔을 통해 여러 개의 초기 데이터를 포함해야하는 프로그램을 관리하고 있는데 스크립트를 통해 초기 데이터로 프로그램을 실행할 수 있다는 것을 알게 되었기 때문에 반복해서 쓸 필요가 없습니다. 프로그램을 실행해야합니다.

    어떻게해야할지 모르겠습니다. 누군가 도와 줄 수 있다면 매우 감사하겠습니다.

  4.   Linux를 사용합시다

    스크립트를 작성하는 프로그래밍 언어에 따라 다릅니다. 그러나 어떤 경우에도 필요한 것은 다음과 같습니다.

    1) 스크립트가 실행될 때마다 사용자가 해당 데이터를 입력하도록하려면 가장 일반적인 절차는 변수가 입력에 입력 된 값을 취하는 것입니다.

    2) 값이 항상 같은 경우 상수를 사용할 수 있습니다.

    3) 또 다른 옵션은 스크립트가 매개 변수를 취할 수있는 가능성입니다.

    건배! 폴.

  5.   Linux를 사용합시다

    당신이 언급 한 것이 흥미 롭습니다. 쉐방 라인 또는 다이렉트 뱅 라인의 2 가지 방식으로 불린다. 나는 당신에게 정보를 제공합니다 : http://python.about.com/od/programmingglossary/g/defbangline.htm
    건배! 폴.

  6.   안녕하세요.

    흥미롭게도 나는 그 세부 사항에 대해 생각하는 것을 멈추지 않았습니다. 콘솔 러 리터칭에 대한 더 많은 기사를 보는 것은 흥미로울 것입니다. 그중에서도 호환성을 위해서만 존재하는 불필요한 코드 킬로를 제거하고 시스템 속도를 향상시키는 유명한 커널 재 컴파일이 있습니다.

  7.   Linux를 사용합시다

    괜찮아. 명심 할게요.
    건배! 폴.

  8.   Linux를 사용합시다

    효과가있어서 다행입니다. 저는 항상 흥미롭고 실용적이라고 생각되는 것을 게시하려고 노력합니다.
    포옹! 폴.

  9.   펠릭스 마누엘 브리토 아마 란 테

    좋은 습관을 가진 모든 프로그래머는 코드의 첫 줄에 "뱅 라인"을 추가합니다. 파이썬에서는 코딩과 뱅 라인을 결코 잊지 않습니다.
    #! / usr / bin / python2.7
    # *. * 인코딩 = utf-8 *. *

  10.   다이엑스02

    훌륭합니다. 특히 소스 파일 (tar.gz 등)에서 컴파일하거나 설치할 때 명령 줄에 대한 자세한 정보를 게시 할 수 있기를 바랍니다.

  11.   조 디 카스트로

    난 "뱅 라인"에 대해 들어 본 적이 없었어 난 항상 Shebang으로 알고 있었어

    http://en.wikipedia.org/wiki/Shebang_%28Unix%29

    안부

  12.   조나단 페르난데즈

    흥미로운 메모… 감사합니다!

  13.   이엠디엠

    얼마나 흥미 로웠는지, 나는 프로그래밍과 스크립트와 관련된 모든 것에 대해 완전히 무지하다고 선언했습니다. 어떻게 작동하는지 전혀 몰랐지만 일부는 그 헤더를 가지고 있음을 알아 차 렸습니다.

  14.   마리오 라이 몬디

    이 항목과 관련하여 나에게 일어난 설명 : 어도비 에어 장치 (포커 확률 계산기)를 설치하고 싶었습니다. 어도비 에어 인스톨러가하는 일은 "su"가 포함 된 해당 스크립트를 실행하는 것입니다.하지만 ./ 형식으로 루트 암호를 묻습니다. 스크립트에 실행 권한이 없었기 때문에 권한이 거부되었습니다. 해결책은 권한을 변경하지 않으려면 sh로 스크립트를 실행합니다 (tmp chmod 폴더 등으로 이동하는 것보다 빠름). 거기에서 스크립트가 실행되고 어도비 설치 프로그램과 다른 나비를 호출합니다.

  15.   에로 센닌

    매우 흥미로운 기사! 콘솔에 대해 좀 더 알 수 있도록 도와 주셔서 감사합니다. 이런 기사를 계속해서 올리는지 봅시다 ^^.
    계속 유지하세요, 이것은 의심 할 여지없이 제가 가장 좋아하는 블로그입니다!

  16.   에르파워

    사용되는 인터프리터 버전간에 차이가있을 수 있습니다. shebang에 따라 스크립트를 직접 실행하면 어떤 버전의 인터프리터를 사용할지 표시 할 방법이 없습니다. 대신 인터프리터를 실행하고 스크립트를 매개 변수로 전달하면 실행중인 버전을 알 수 있습니다.

    예를 들어 Python에서 shebang이 #! / Usr / bin / python2.4 인 경우 프로그램은 #! / Usr / bin / python2.6 또는 #! / Usr / bin / python 인 경우와 다르게 실행됩니다. (일반적으로 기본적으로 설치 및 구성되는 Python 버전에 대한 심볼릭 링크). 이는 Python 2.6에 Python 2.4에없는 새로운 기능이 있기 때문에 발생하므로 시스템에 Python 2.4 만 설치되어있는 경우 해당 기능을 사용하는 스크립트를 작성하면 #! / Usr / bin / python shebang이 실패합니다. 대신 "python2.4 /path/al/script.py"또는 "python2.6 /path/al/script.py/"로 시작하여 원하는 Python 버전으로 스크립트를 실행하도록 강제 할 수 있습니다.

    쉘 스크립트의 경우 사용하는 쉘 간에도 차이가 있으므로 #! / Bin / sh 및 #! / Bin / bash를 사용하면 스크립트에 따라 결과가 다를 수 있습니다. bash에만있는 기능을 사용하여 스크립트를 작성하고 #! / Bin / sh shebang을 지정하면 스크립트가 Linux에서 작동 할 수 있지만 (대부분의 배포판에서 / bin / sh는 bash에 대한 심볼릭 링크입니다) 실패 할 수 있습니다. bash가 설치되지 않았거나 / bin / sh가 / bin / bash에 대한 심볼릭 링크가 아닌 다른 UNIX에서.

    또한 이동성과 관련하여 shebang에 표시된 경로는 절대적이며 통역사가 다른 장소에 설치되는 경우가 있음을 고려해야합니다. 예를 들어, 배포에서 패키지를 사용하는 대신 Python을 다운로드하고 컴파일 한 경우 / usr / local / bin / python에 Python 인터프리터를 설치하는 것이 일반적입니다. 당신의 shebang이 #! / Usr / bin / python이면 스크립트는 해당 시스템에서 작동하지 않습니다. 이러한 문제를 방지하기 위해 다음에 설명 된대로 "#! / Usr / bin / env python"(또는 "#! / Usr / bin / env sh")으로 사용할 수 있습니다. http://en.wikipedia.org/wiki/Shebang_(Unix)#Portability

  17.   Linux를 사용합시다

    감사합니다 Jonathan! 댓글을 보니 반갑습니다!
    건배! 폴.

  18.   안토니오

    내가 알고 싶은 것을 어디에도하지 않거나 적어도 검색 엔진에서 그것을 제기하는 방법을 모르겠습니다. xX가 aptitude 또는«su»명령을 실행하는 스크립트를 만들고 싶습니다. 내가 생각할 수있는 두 가지 경우입니다) 그리고 적성의 경우 가끔 "yon"을 입력하라고 요청하거나 "su"에 암호를 요청합니다. 스크립트에서 해당 옵션을 선택하고 싶습니다. 매개 변수를 전달하거나 모르는 방법을 사용하여 자동으로 .... 관심을 가져 주셔서 감사합니다

    1.    리눅스를 사용하자

      안녕하세요 안토니오! 문제가 비밀번호를 입력해야하는 것이라면 해결책이 없다고 생각합니다. 보안 조치이기 때문에 모든 사람이 프로그램을 설치할 수는 없습니다.
      적성과 '예'라고 답하면 해결 될 수 있다고 생각합니다. 이 시점에서 사용할 정확한 매개 변수를 기억하지 못하지만 man 페이지에서 찾아보십시오. 터미널을 열고 man aptitude 명령을 입력하십시오.
      포옹! 폴.

  19.   데이비드 MM

    아주 좋은 게시물입니다.
    나는 특히-이 게시물에서-발생하는 질문 / 의심이 매우 명확하고 간결하게 답변되는 것을 좋아했습니다.