中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux系統的set命令怎么用

發布時間:2022-01-22 19:07:17 來源:億速云 閱讀:226 作者:iii 欄目:開發技術

這篇文章主要講解了“Linux系統的set命令怎么用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Linux系統的set命令怎么用”吧!

set是Linux系統中用來設置shell的命令,它能設置所使用shell的執行方式,可依照不同的需求來做設置。 set命令的參數,linux自帶的說明如下:

參數說明

  • -a  標示已修改的變量,以供輸出至環境變量。

  • -b  使被中止的后臺程序立刻回報執行狀態。

  • -C  轉向所產生的文件無法覆蓋已存在的文件。

  • -d  Shell預設會用雜湊表記憶使用過的指令,以加速指令的執行。使用-d參數可取消。

  • -e  若指令傳回值不等于0,則立即退出shell。

  • -f   取消使用通配符。

  • -h  自動記錄函數的所在位置。

  • -H Shell  可利用”!”加的方式來執行history中記錄的指令。

  • -k  指令所給的參數都會被視為此指令的環境變量。

  • -l  記錄for循環的變量名稱。

  • -m  使用監視模式。

  • -n  只讀取指令,而不實際執行。

  • -p  啟動優先順序模式。

  • -P  啟動-P參數后,執行指令時,會以實際的文件或目錄來取代符號連接。

  • -t  執行完隨后的指令,即退出shell。

  • -u  當執行時使用到未定義過的變量,則顯示錯誤信息。

  • -v  顯示shell所讀取的輸入值。

  • -x  執行指令后,會先顯示該指令及所下的參數。

  • +  取消某個set曾啟動的參數。

也就是說,在”set -e”之后出現的代碼,一旦出現了返回值非零,整個腳本就會立即退出。有的人喜歡使用這個參數,是出于保證代碼安全性的考慮。但有的時候,這種美好的初衷,也會導致嚴重的問題。

真實案例: 腳本a.sh開頭使用了”set -e”,且能正常運行。在幾個月或更久以后,因需求升級,在腳本中增加了3行hadoop操作:

 #!/bin/bash set -e ... /home/work/.../hadoop dfs -rmr /app/.../dir /home/work/.../hadoop dfs -mkdir /app/.../dir /home/work/.../hadoop dfs -put file_1 /app/.../dir/ ...123456

這幾行hadoop命令邏輯很簡單:在hdfs上清除并新建一個目錄,并將一份本地文件推送至這個目錄,供后續使用。將這幾行單拎出來,在命令行下執行,除了提示待刪除的目錄不存在,并沒有什么問題,文件還是會被推送到指定的地方。

但第一次執行這個腳本的時候,卻失敗退出了,且導致調用該腳本的程序整體退出,造成了嚴重的后果。原因是hdfs上還沒有這個目錄,rmr這一行會返回255,這個值被腳本前方的”set -e”捕捉到,直接導致了腳本退出。

新增的代碼本身并沒有問題,先刪除再新建目錄,反而是保證數據安全的比較規范的操作,刪除命令本身的容錯性,可以保證后續命令正常執行。事實是這個腳本有好幾百行,且邏輯比較復雜,在增加這幾行代碼的時候,開發人員已經不記得這個腳本里還有個”set -e”埋伏著了。

可見設置”set -e”,在腳本開發過程中可能很有幫助,而在開發完成后,特別是對于后期可能有升級的腳本,則可能是埋下了安全隱患。

\2. set -o pipefail 對于set命令-o參數的pipefail選項,linux是這樣解釋的: “If set, the return value of a pipeline is the value of the last (rightmost) command to exit with a non-zero status,or zero if all commands in the pipeline exit successfully. This option is disabled by default.”

設置了這個選項以后,包含管道命令的語句的返回值,會變成最后一個返回非零的管道命令的返回值。聽起來比較繞,其實也很簡單

 # test.sh set -o pipefail ls ./a.txt |echo "hi" >/dev/null echo $?123

運行test.sh,因為當前目錄并不存在a.txt文件,輸出: ls: ./a.txt: No such file or directory 1 #設置了set -o pipefail,返回從右往左第一個非零返回值,即ls的返回值1

注釋掉set -o pipefail這一行,再次運行,輸出: ls: ./a.txt: No such file or directory 0 # 沒有set -o pipefail,默認返回最后一個管道命令的返回值

感謝各位的閱讀,以上就是“Linux系統的set命令怎么用”的內容了,經過本文的學習后,相信大家對Linux系統的set命令怎么用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

莱芜市| 大石桥市| 简阳市| 犍为县| 长宁县| 内江市| 和政县| 宜州市| 二连浩特市| 梁河县| 犍为县| 石台县| 丹棱县| 辽阳市| 隆德县| 清流县| 剑河县| 新源县| 秀山| 葫芦岛市| 信丰县| 郧西县| 资阳市| 秭归县| 荥阳市| 荔浦县| 龙山县| 安丘市| 钟山县| 云霄县| 保德县| 九龙县| 商城县| 定州市| 宣威市| 临海市| 阿克陶县| 南召县| 贵德县| 揭西县| 光泽县|