<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 環境變量及配置相關命令 > Shell腳本的命令常常會使用到`環境變量`進行信息傳遞,因此非常有必要對`環境變量`知識做個基礎了解。 - `環境變量`相關命令 : `export`、`env`、`set` - 重要的`環境變量`: `PATH`、`HOME`、`RANDOM` - 環境變量配置文件: `/etc/profile`、`~/.bash_profile`、`~/.bashrc` ## 環境變量相關命令 - `export` : Bash保留關鍵詞,用于導出當前Shell環境變量的`name`變量到后續執行的命令的環境中,如果沒有指定`name`或設置了`-p`參數將打印輸出當前Shell的`所有被導出`的變量名稱和變量值。用法:`export -fn [name[=word]]`或`export -p`。常用在`多個子腳本之間`的環境變量信息傳遞。 - `env` : 獨立系統命令,在`重建`的Shell環境中運行命令程序,如果無任何參數則打印輸出當前環境變量信息,用法:`env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]` 。 - `set` : Bash內建命令,用于設置`Shell`的`屬性`,注意到這個并不是用來設置環境變量的命令,但是無參數時可以輸出顯示當前`Shell`的所有變量名稱和變量值信息,比`export`輸出內容更多(包含沒有被導出的變量)。 示例,您可以預測一下執行下面腳本后的輸出結果: ```sh #!/bin/bash name="Bob" echo "Hello $name" sh -c 'echo "Hello $name"' env name="Jim" echo "Hello $name" env name="Jim" sh -c 'echo Hello $name' echo "Hello $name" export name="Tom" echo "Hello $name" sh -c 'echo "Hello $name"' env sh -c 'echo Hello $name' ``` 執行輸出結果: ```sh $ sh ./a.sh Hello Bob Hello Hello Bob Hello Jim Hello Bob Hello Tom Hello Tom Hello Tom ``` 跟您預測的結果一致么? 我們來分析一下。 第一條命令`name="Bob"`是在`a.sh`腳本內部設置環境變量`name`,但生效范圍僅限當前的腳本中, 第二條命令`echo "Hello $name"`,`name`變量值為"Bob",輸出結果為"Hello Bob"。 第三條命令`sh -c 'echo "Hello $name"'`是在新建的子Shell環境中執行`'echo "Hello $name"'`命令,您可能注意到了這里命令兩邊用了單引號,目的防止在`a.sh`腳本執行子shell進程的參數傳遞時對`name`變量進行解析,應該將`name`放到子Shell中進行解析,因此輸出結果是`Hello `,因為子Shell中并沒有設置`name`環境變量。 第四條命令`env name="Jim" echo "Hello $name"`,雖然設置了`name`變量,但是由于`沒有使用單引號`括起來導致在`env`命令新生成的Shell環境中執行的命令是`echo "Hello Bob"`,而不是`echo "Hello $name"`,因此輸出結果分別為"Hello Bob"。 第五條命令`env name="Jim" sh -c 'echo Hello $name`解決了上一條命令的問題,因此輸出結果為"Hello Jim"。 第六條命令`echo "Hello $name"`的目的是用來說明`env`命令內設置的環境變量不會對當前Shell腳本的環境變量產生影響,輸出結果為"Hello Bob"。 第七條命令`export name="Tom"`,導出了`name`變量,這意味著此命令之后生成的其他子Shell的環境變量中會攜帶`name`變量,因此最后的三條命令輸出的都是"Hello Tom"。 如果您在以后編寫腳本時還會遇到此類環境變量顯示不正確或者與預期不符合時,您可以回來再仔細的想一想上面的示例,相信會幫到您的。 ### set使用介紹 > 由于`set`命令在`Shell`腳本中可以改變腳本的執行結果和狀態,對于編寫、調試腳本都比較重要,所以單獨的說明一下。 使用方法: `set [--abefhkmnptuvxBCHP] [-o option] [arg ...]` 常用的參數: - `-a` : `-o allexport`自動將設置的變量導出,相當于默認每個變量都使用了`export`進行導出。 - `-e` : `-o errexit`當腳本中的命令執行返回結果為非0值時,腳本立即退出。也就是執行錯誤后不再繼續向下執行,避免更多的錯誤結果。 - `-n` : `-o noexec`只讀取命令,并不執行。常用于語法檢測,通常使用`sh -n script.sh`方法檢查腳本語法正確性。 - `-u` : `-o nounset`遇到未定義的變量時報錯退出執行,而不是默默的忽略繼續執行。 - `-v` : `-o verbose`在讀取輸入的同時打印出來。 - `-x` : `-o xtrace`跟蹤調試腳本,并顯示 `PS4` 的值。通常使用`sh -x script.sh`作為`調試`查看腳本執行過程中變量值的真實情況。 - `-o vi`: 使用`vi`樣式的命令行編輯操作方式,如果你比較喜歡使用`vi`的操作方式就可以這樣設置了。 - `-o emacs`: 使用`emacs`樣式的命令行編輯操作方式,這是`Bash`的默認方式。 >值得說的是,當我們想要`關閉`某個選項時,可以把減號`-`替換成加號`+`執行一下就可以了,例如`set +x`就可以關閉`xtrace`跟蹤調試功能。這樣我們就可以非常靈活的使用這些`shell`屬性了。 ## 重要的環境變量 - `PATH` : 定義了Shell中執行的命令的搜索路徑列表。目錄之間用冒號(`:`)分割,格式如“/path/to/bin1:/path/to/bin2:.:/usr/bin”,當執行`ls`時會按先后順序逐個查找$PATH變量中的目錄,找到后停止繼續查找,如果找不到會提示命令找不到"ls: command not found"。 - `HOME` : 當前用戶的個人目錄;內建命令 `cd` 的默認參數。在執行波浪線(`~`)擴展時也用到這個變量。 - `RANDOM`: 每次引用這個參數時,都會產生一個 0 到 32767 之間的隨機整數。可以通過向 `RANDOM` 賦值來初始化隨機數序列。如果取消了 RANDOM 的定義,它就失去了特殊的意義,即使后來重新定義它。 - `HISTFILE`: 保存命令歷史的文件名。默認值是`~/.bash_history`。如果取消定義,在交互式 shell 退出時 命令歷史將不會保存。 - `HISTFILESIZE`: 歷史文件中包含的最大行數。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看