linux shell內建命令set


基本語法:
set命令的基本語法如下(來自bash的man手冊):
    set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
    set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]
set通過選項來開關shell的不同特性,每個特性都對應一個選項。每個特性都有兩種配置方式:
一種是通過set -e和set +e這種形式,即直接指定選項。
另一種是通過set -o errexit和set +o errexit這種形式,即通過o這個選項來指定選項名。
我想你一定對選項是用+號還是-號十分好奇。在set命令中,選項前面跟着 - 表示開啟這個選項,+ 表示關閉這個選項。

選項介紹
-o
執行set -o會輸出當前的set選項配置情況:
例如:
~/programming/test$ set -o
allexport       off
braceexpand     on
emacs           on
errexit         off
errtrace        off
functrace       off
hashall         on
histexpand      on

+o
執行set +o也是輸出當前的set選項的配置情況,只不過輸出形式是一系列的set命令。這種輸出形式一般用於重建當前的set配置項時使用。
例如:
~/programming/test$ set +o
set +o allexport
set -o braceexpand
set -o emacs
set +o errexit
set +o errtrace
set +o functrace
set -o hashall
set -o histexpand
set -o history
set +o ignoreeof

set -e 或者 set -o errexit
設置了這個選項后,當一個命令執行失敗時,shell會立即退出。

set -n 或者 set -o noexec
設置了這個選項后,shell讀取命令,但是不會執行它們。這個選項可以用來檢查shell腳本是否存在語法錯誤。

set -u 或者 set -o unset
設置了這個選項之后,當shell要擴展一個還未設置過值的變量時,shell必須輸出信息到stderr,然后立即退出。但是交互式shell不應該退出。

set -x 或者 set -o xtrace
設置了這個選項之后,對於每一條要執行的命令,shell在擴展了命令之后(參數擴展)、執行命令之前,輸出trace到stderr。
stdout, stdin, stderr的中文名字分別是標准輸出,標准輸入和標准錯誤。

set -o pipefail
這個選項會影響管道的返回值。默認情況下,一個管道的返回值是最后一個命令的返回值,
比如cmda | cmdb | cmdc這個管道,返回值是由cmdc命令的返回值決定的。如果指定了pipefail選項,那么管道的返回值就會由最后一個失敗的命令決定,
意思就是有命令失敗就會返回非0值。如果所有命令都成功,則返回成功。

例子
#!/bin/bash

set -o xtrace   #即開啟簡易的腳本命令調試模式
set -o errexit  # 可以把這樣注釋掉看下執行效果有什么不一樣。

echo "Before"
ls /filenoexists  # ls也不存在的文件;執行報錯就退出了腳本,因此echo "After"就並未執行
echo "After"

詳細參考

man bash中的SHELL BUILTIN COMMANDS


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM