Bash

如果 shell 以互動模式執行,我如何檢查 bash?

  • March 27, 2021

~/.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例如的正確操作。

無論如何,測試互動性仍然是一個好主意,因為可能存在不正確的配置。

引用自:https://serverfault.com/questions/146745