【发布时间】:2011-03-10 07:45:49
【问题描述】:
我有一个没有 sudo 的主机。它是用 ksh 设置的,我太习惯 bash 并且 chsh 不起作用。所以我把 /bin/bash 作为系统上 .profile 的第一行。
所以结果是,当我登录到这个系统时,它会自动让我进入 bash。但是,当我退出 shell 时,毫不奇怪我会进入 ksh。
有什么技巧可以避免这种情况?
【问题讨论】:
我有一个没有 sudo 的主机。它是用 ksh 设置的,我太习惯 bash 并且 chsh 不起作用。所以我把 /bin/bash 作为系统上 .profile 的第一行。
所以结果是,当我登录到这个系统时,它会自动让我进入 bash。但是,当我退出 shell 时,毫不奇怪我会进入 ksh。
有什么技巧可以避免这种情况?
【问题讨论】:
使用exec将当前进程(shell)替换为新进程(shell)。
【讨论】:
exec 从您的 .profile 启动您的 bash,这样就没有 ksh 了。 (最初的措辞听起来像是exec 会同时退出两个shell)
我推荐两个步骤:
if [ $SHELL != /bin/bash ]
then SHELL=/bin/bash exec /bin/bash --login
fi
或者,您可以将其压缩为:
[ $SHELL != /bin/bash ] && SHELL=/bin/bash exec /bin/bash --login
然后,您可以在此之后放置 Bash 配置文件的其余部分。请注意,您可能不会在第一行添加 shebang - 这会使事情变得混乱。此外,在测试时,请确保您打开了第二个连接(窗口),以便您可以调整问题。被错误的个人资料锁定是很烦人的。
【讨论】:
您可以像这样编写一个名为myexit 的脚本:
kill -1 $(ps | sed 1d | awk '{print $1}')
它发送挂断信号(SIGHUP)给附加到这个终端的进程。 并且不会影响nohup启动的任何进程。
【讨论】:
kill -1 $(ps -t $(tty) o pid=) 或 kill -1 $(ps | awk 'NR>1 {print $1}')