shell result from cmdline
echo $?
if 0 then success ;else failure
(shell 執(zhí)行每部返回值,rm -rf 錯誤,打包不能覆蓋)
?
我們知道,linux命令行上一個命令的退出碼放在了$?環(huán)境變變中,但是,如果這個命令是一串管道符連接和多個命令,怎么知道每個命令的退出碼?你可以 使用 PIPESTATUS環(huán)境變量。比如這個測試:true | false | true; echo "${PIPESTATUS[@]}"
?
解決sudo: sorry, you must have a tty to run sudo 前幾天遇到一個問題,在一個終端中調(diào)用另一個shell,始終是無法執(zhí)行的,后來捕捉到報錯信息為sudo: sorry, you must have a tty to run sudo,后來,在網(wǎng)上了解到可以如下解決: 1. 編輯 /etc/sudoers 1)Defaults ? ?requiretty,修改為 #Defaults ? ?requiretty,表示不需要控制終端。 2)Defaults ? ?requiretty,修改為 Defaults:nobody !requiretty,表示僅 nobody 用戶不需要控制終端。 如果修改為 Defaults:%nobody !requiretty,表示僅 nobody 組不需要控制終端。 其實(shí)只要注釋掉)Defaults ? ?requiretty 那個就可以了。表示在執(zhí)行的時候不打開終端。但是,有的shell必須要有終端才可以執(zhí)行。這樣顯然是不行的。后來,又找到一片文章才搞定。下面為抄錄的,僅為記錄以后使用。 有些程序/腳本可能在沒有控制終端的環(huán)境下上執(zhí)行(如系統(tǒng)啟動服務(wù)時, Daemon, 或者是setsid啟動的程序等) 但可能這個程序需要控制終端, 這這么辦呢? 如我們的例子: 我們在linux啟動時啟動一個服務(wù), 可是中間有個程序(舊的systemtap)使用了sudo 但sudo需要控制終端(當(dāng)然可以通過修改sudo的配置文件, 但這樣很對用戶不友好啊) 例子: (setsid 啟動的程序會失去控制終端) # setsid sudo ls sudo: sorry, you must have a tty to run sudo (如果你的系統(tǒng)沒有輸出這句話, 那就是你的系統(tǒng)的sudo配置文件允許sudo可以在這個, 請確保已經(jīng)設(shè)置了Defaults ? ?requiretty) 沒有控制中斷的時候, 打開控制終端是這樣的效果: # setsid head -c 0 /dev/tty head: cannot open `/dev/tty' for reading: No such device or address 為了解決這個問題, 所以應(yīng)該使用能創(chuàng)建(偽)控制終端的程序來啟動你的程序如: script, expect 如: # setsid script -c "sudo ls" /dev/null 或: # setsid expect -c 'spawn sudo ls; expect' #打開控制終端成功: # setsid script -c 'head -c 0 /dev/tty' /dev/null? # setsid expect -c 'spawn head -c 0 /dev/tty; expect' 不過 setsid 跟 script 組合使用有著奇怪的bug, 我這段時間非常的depression, 這樣對script, expect來說, 都是大材小用了
轉(zhuǎn)載于:https://www.cnblogs.com/SZLLQ2000/p/6210823.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的shell (check return of each line)(PIPESTATUS[@])and sudoer的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。