Bash
如果 shell 以互動模式執行,我如何檢查 bash?
~/.bashrc
如果我在互動模式下執行,或者說是通過 ssh 執行命令,我如何判斷 (in )。.bashrc
如果是後者,我想避免列印 ANSI 轉義序列。
根據
man bash
:PS1 已設置並且 $- 包括 i 如果 bash 是互動式的,則允許 shell 腳本或啟動文件測試此狀態。
所以你可以使用:
if [[ $- == *i* ]] then do_interactive_stuff fi
還:
當一個不是登錄 shell 的互動式 shell 啟動時,bash 會從 /etc/bash.bashrc 和 ~/.bashrc(如果這些文件存在)讀取並執行命令。
所以
~/.bashrc
僅用於互動式外殼。有時,由於它干擾了預期的行為,人們從中獲取~/.bash_profile
或不正確。~/.profile
如果你想簡化通用程式碼的維護,你應該使用一個單獨的文件來包含通用程式碼,並獨立於兩個 rc 文件來獲取它。最好不要從登錄
rc
文件輸出到標準輸出,例如~/.bash_profile
或~/.profile
因為它可能會干擾rsync
例如的正確操作。無論如何,測試互動性仍然是一個好主意,因為可能存在不正確的配置。