Linux下判斷執行的命令或腳本是否是交互式

Linux下判斷執行的命令或腳本是否是交互式

Linux下/etc/profile腳本解釋

for i in /etc/profile.d/*.sh ; do    
    if [ -r "$i" ]; then   #判斷是否可讀
        if [ "${-#*i}" != "$-" ]; then  #判斷腳本是否是交互式腳本
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done

#條件爲真時,執行交互式,加載
#條件爲假時,執行非交互式,並丟進黑洞,
#目的是防止有些執行某些程序(如scp),需要登錄到遠端機器,讀取遠端機器的環境變量
有輸出,導致程序中斷!

"${-#*i}"  #這個是字符串截取命令,截取出來是mBH
$-  #結果是himBH

#himBH是交互式
#mBH是非交互式
命令行輸出
[root@pc01 ~]# echo $-
himBH  #是交互式
[root@pc01 ~]# echo $?
0

[root@pc01 ~]# cat test.sh 
#!/bin/bash
echo 99
echo $-
[root@pc01 ~]# bash test.sh 
99
hB  #是非交互式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章