【问题标题】:How to exit multiple nested shells at once?如何一次退出多个嵌套的shell?
【发布时间】:2011-03-10 07:45:49
【问题描述】:

我有一个没有 sudo 的主机。它是用 ksh 设置的,我太习惯 bash 并且 chsh 不起作用。所以我把 /bin/bash 作为系统上 .profile 的第一行。

所以结果是,当我登录到这个系统时,它会自动让我进入 bash。但是,当我退出 shell 时,毫不奇怪我会进入 ksh。

有什么技巧可以避免这种情况?

【问题讨论】:

    标签: bash shell unix ksh


    【解决方案1】:

    使用exec将当前进程(shell)替换为新进程(shell)。

    【讨论】:

    • 更具体地说,使用exec 从您的 .profile 启动您的 bash,这样就没有 ksh 了。 (最初的措辞听起来像是exec 会同时退出两个shell)
    【解决方案2】:

    我推荐两个步骤:

    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 - 这会使事情变得混乱。此外,在测试时,请确保您打开了第二个连接(窗口),以便您可以调整问题。被错误的个人资料锁定是很烦人的。

    【讨论】:

      【解决方案3】:

      您可以像这样编写一个名为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}')
      猜你喜欢
      • 2020-01-14
      • 1970-01-01
      • 2013-09-11
      • 2011-10-02
      • 2017-08-15
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      相关资源
      最近更新 更多