2014-09-30 57 views
1

在我的程序中,我需要輸出給用戶他正在使用的shell。所以在文件/etc/udate-motd.d/00-header我寫了printf "$SHELL",但問題是,即使我將shell切換到zsh,$ SHELL仍然等於/ bin/bash。我通過互聯網搜索,發現我可以通過使用MyShell='ps -hp $$',這裏又是一個問題。當我使用它MyShell是一個字符串與進程數(/etc/update-motd.d/00-header也有),但沒有字zsh獲取Linux shell的名稱

那麼我該如何理解哪個shell使用這個日誌呢?

+2

[此問題](https://stackoverflow.com/questions/3327013/how-to-determine-the-current-shell-im-working-on)至少是密切相關的,如果不是重複的話。 – ajp15243 2014-09-30 17:51:05

+0

@ ajp15243,非常感謝!找到它,對不起,重複:( – PepeHands 2014-09-30 17:54:44

回答

2

「互聯網」給了你一種ps語法。你已經標記了這個linux,所以不要使用BSD語法。試試這個:

ps hp $$ -o cmd 

沒有破折號

+0

這樣我不斷得到:'/ bin/bash/etc/update-motd.d/00-header' – PepeHands 2014-09-30 18:03:51

0

的用戶Shell是在/ etc/passwd文件確定。爲什麼不從那裏獲取信息?你可以

grep $USER /etc/passwd | cut -f7 -d: 

得到shell。

+0

這給出了shell聲明爲用戶的登錄shell,不是用戶實際運行的shell(例如,你可以啓動'xterm -e/bin/zsh'或'exec/bin/zsh') – 2014-09-30 18:55:57

+0

,但是你的兩個例子都不涉及登錄.Op使用「那麼我怎麼才能知道哪個shell使用了這個日誌記錄呢?「這是寫在」現在進行中「,表示在$ USER正在登錄的過程中阻止shell發生。我可能錯了,但因爲我不是英國人揚聲器... – Matthias 2014-09-30 19:01:49

+0

是的,我真的需要知道哪個shell正在使用一個人,它試圖在'ctrl + alt + f4'登錄,但所有其他解決方案都不起作用。 。我需要使用'ctrl + c'。所有其他的都不好,因爲當我改變我的shell時'chsh -s/bin/zsh' $ SHELL仍然是'/ bin/bash' – PepeHands 2014-09-30 19:15:00