Bash

所有子程序都是 Bash (!),

  • September 18, 2013

我試圖使用 GDB,發現每當它試圖生成我正在調試的程序時,都會生成 Bash(GDB 會說starting myProg...,然後 Bash 會出現。當我殺死 Bash 時,我會回到 GDB,它會告訴我 Bash 的退出狀態)。起初我認為這是 GDB 的一個奇怪問題,但後來我發現試圖從 Vim 產生一個程序也只是產生了 Bash。

通過一個奇怪的靈感閃現,我將這個問題與我的預設 shell 是 Tcsh 的事實聯繫起來,因為我不允許更改它,我只是將我的設置.tcshrc為包含exec bash. 當我將其更改為bash或僅使用 Tcsh 時,問題就消失了。

我完全不了解 Tcsh 事情是如何導致我的問題的。任何人都可以提供嗎?


順便說一句,我能夠獲得執行 GDB 的臨時修復程序,PATH="" /usr/bin/gdb而不僅僅是gdb. 它吐了出來bash: command not found,然後繼續生成我想調試的程序。

其他答案的解釋很好。

作為一種解決方案,我會設置export SHELL=bash許多命令,如 gdb 或 screen 使用此變數來確定使用哪種 shell 來生成命令。

因此,bash 直接用於生成您的命令,而不是配置為僅啟動 bash 的 tcsh。


您可以通過使用 ssh-key 登錄到您的伺服器並在 authorized_keys 文件中將強制命令添加到您的密鑰來改進您的設置。

這樣,您可以直接在 bash 中啟動,但不會破壞任何 tcsh 腳本。

在您的 .tcshrc 文件中,您可以exec bash這樣包裝:

if ($?prompt) then
   exec /path/to/bash
endif

$?prompt對於非互動式 shell 將為 false,因此 bash 僅在您有互動式會話時使用。

引用自:https://unix.stackexchange.com/questions/87051