2014-09-30 56 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