Bash
所有子程序都是 Bash (!),
我試圖使用 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 僅在您有互動式會話時使用。