一分鐘看懂頭部 shell #!/usr/bin 命令

raybon發表於2019-09-16

在電腦科學中,Shell俗稱殼(用來區別於核),是指“提供使用者使用介面”的軟體(命令解析器)。它類似於DOS下的command.com和後來的cmd.exe。它接收使用者命令,然後呼叫相應的應用程式。

為什麼要講解這個

因為剛好看到這個,且只是濛濛懂,不想遺忘這個細小知識點,雖然大部分人一看都明白,但還是記下來

一、python 指令碼 樣例

  • 常見的python 檔案頭部指令碼

    #!/usr/local/bin/python3

    • 首先解釋一下含義

      1.  # shell 指令碼中單獨使用代表 註釋  
      2.  #!  組合使用表示 要用在 shell 指令碼中
      3.  /usr/local/bin/python3  代表 該指令碼所執行的環境是python3 不是py2  
      • 引入的目的:
      1. 如果 呼叫 python 指令碼時(在終端命令執行),使用的是 `python3 script.py`   

      看一張圖:
      shell.png

      當使用 $PATH 下的 python3 時,**#!/usr/local/bin/python3** 此時會被忽略,相當於註釋

      1. 如果 直接呼叫python 指令碼

            **./my-first-script.py** 
          會提示 Permissions Deny 許可權拒絕 
        執行: `chmod a+x my-first-script.py`  將檔案切換成可執行 x 許可權
        a : all 
        u : user
        g : group
        x : exec 可執行
        
        此時我們所看到的是可以正常輸出的 
        在Mac 和Linux 上 會使用我們指定的解析器進行解析 指令碼檔案
        這也就是為什麼我們能夠 使用 shell 指令碼的原因

二、使用PHP env 環境

  • 如果一個shell 指令碼是 php 檔案,通常我們可以看到檔案的頭部會有如下形式的程式碼

        #!/usr/bin/env php
        <?php
        define('LARAVEL_START', microtime(true));
        exit($status);
  • 首先解釋一下 #!/usr/bin/env php

    1 . env 是Mac 或者 Linux 系統的環境變數, 是一個可執行命令
    2 . env php : 指的是 php 版本 使用當前 env 環境內的 配置的 Path 路徑下的 php 版本 
    3 . 當前指令碼在執行shell 時,會自動從env 內呼叫合適的直譯器執行
  • 目的:

    • 對於php 和 python 我們通常會在一個環境上安裝兩種不同的版本
  • e.g: python2 python3 php5 php7

    • 為了能夠解析當前指令碼檔案,該命令會自動從當前env 環境中查詢配置的版本

三、總結:

  • 無論那種寫法,最終都是要讓我們的指令碼執行起來,前提是我們必須安裝對應的直譯器,配置到環境 變數中方能生效

    注意點:

  • 總結:
    • 注意點
         1. 我們從頭到尾都沒有提 <Windows> 環境,win 環境 執行檔案 大部分是依據其檔案的字尾進行識別的,
         2. 在windows下無論在程式碼里加什麼都無法直接執行指令碼,因為在windows下檔名對檔案的開啟方式起了決定性作用。

鳴謝: 在這裡非常感謝@Mitoop

相關文章