私はGDBを使用しようとしていて、デバッグ中のプログラムを作成しようとするたびにBashが生成されることを発見しました(GDBはと言ってBashが表示されます。Bashをstarting myProg...
終了するとGDBに戻るか、Bashの終了状態)。最初に私はこれがGDBの奇妙な問題だと思いましたが、Vimでプロセスを作成しようとするとBashも生成されることがわかりました。
瞬間的にインスピレーションを受け、問題を私のデフォルトシェルがTcshであるという事実と関連付けまし.tcshrc
たexec bash
。 Tcshに変更するか、bash
Tcshを使用すると問題がなくなりました。
私はTcshがどのように私の問題を引き起こすのか分かりません。誰でも情報を提供できますか?
ところで、ただ.NETのPATH="" /usr/bin/gdb
代わりにGDBを実行することでそうすることができましたgdb
。bash: command not found
答え1
他の答えには良い説明があります。
解決策として、私はexport SHELL=bash
コマンドを生成するために使用するシェルを決定するためにこの変数を使用するようにgdbやscreenなどの多くのコマンドを設定しました。
したがって、 bash だけを起動するように設定された tcsh の代わりに bash を直接使用してコマンドを生成します。
SSHキーを使用してサーバーにログインし、Authorized_keysファイルのキーに強制コマンドを追加すると、設定を改善できます。
これにより、tcshスクリプトを破損することなくbashから直接起動できます。
答え2
.tcshrc ファイルでexec bash
次のようにラップできます。
if ($?prompt) then
exec /path/to/bash
endif
$?prompt
非対話型シェルではfalseなので、対話型セッションがある場合にのみbashを使用してください。
答え3
私は明らかな理由がgdb
プロセスを作成するためにシェルを使用していると思います。
Vimがやります(help !
)
:!{cmd} Execute {cmd} with the shell.
:!ls -l
したがって、Vimが実際に実行されると言うと、
$ SHELL -c 'ls -l'
私の考えでは(私はあなたの言葉を理解するという点で)ハッカースタイル正しく設定してください)のexec bash -l
代わりに簡単に修正できますexec bash
。
その理由は、(ログインシェルではない)後でログインシェル()で使用し、それを指す環境変数をexec bash
変更しないためです。選択したシェルを直接使用する必要があります()。SHELL
gdb
vim
tcsh
bash
メモ:あなたはそれについて考えることができます。何かを実行しているときtcsh
...期待どおりに実行されない可能性があります。
答え4
私が疑うのは、GDB内でプログラムを実行すると、プログラムを実行するためにサブシェルを起動してrcファイルを取得することです。
exec のマニュアルページには、「exec() 関数系列は現在のプロセスイメージを新しいプロセスイメージに置き換えます」と示しています。
私の考えで何が起こっているのかは、rcファイルでexecを呼び出すと、bashで実行しようとしていたすべてのものを置き換え、終了したときにbash終了コードを使用してGDBに戻ることです。 bashでexecを使用してプログラムを実行するには、tcsh(Bashのargvと同じ)が実行したいすべてのエントリに対するプログラム呼び出しを保存する場所を特定し、それをbashに渡す必要があります。
rcファイルが好きで、argvをチェックしてプログラムを実行しようとしていることを確認したり、ログインシェルをインポートしてそれに基づいて他の動作を実行したりすることもできます。