4

入力するすべてのコマンドに対してLinuxコンソールでbash -xをオンにすると、この出力が得られます。

printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"

これはかなり面倒です。どうすればオフにできますか。

前もって感謝します

4

4 に答える 4

4

このコマンドは、ターミナル エミュレータのタイトルを変更するためのエスケープ シーケンスを出力します。だから私はそれがあなたの.bashrcまたは.bash_profilewhen TERMmatchで設定されていると思いますxterm*。そこを見て、コードにコメントしてください。

bash -xコマンドは、たとえそれが印刷の一部であっても、呼び出されたすべてのコマンドを表示するため、印刷され$PS1ます。そのため、対話型シェルで使用したくない可能性set -xがありますが、コードをスクリプトに入れset -x、最初とset +x最後に追加する必要があります (必要でない場合はオプションsource)。

于 2012-12-21T13:54:57.650 に答える
3

問題は理由ではなく、修正方法でした。bash プロンプトで次のように入力します。

unset PROMPT_COMMAND; PS1='\w> '

今なぜ。コマンドはPROMPT_COMMAND、すべての bash コマンドの後に評価されます (設定されますPS1)。通常、このアクティビティは表示されません。しかし、-xあなたと一緒にできます。

于 2012-12-21T15:24:11.813 に答える
0

を使用set -xして、デバッグをset +xオンにしたりオフにしたりできます。

デバッグオプションをオンにすると、BASHは$P4各行のの値を出力します。デフォルトでは、単純で、+その後にスペースが続きます。設定してみてくださいPS4='+ '

それが機能しない場合は$PROMPT_COMMAND、プロンプトを設定していたKornshellユーザーがいます。プロンプトには、ユーザー名やディレクトリなどの有用な情報が表示されるのが一般的です。BASHでは、さまざまなエスケープシーケンスを使用してこれを行うことができます。例えば:

PS1="\u@\h:\w$ "

\uユーザー名、\h短いホスト名、および\wディレクトリに基づく現在のディレクトリに置き換えられます$HOME。ユーザーがいる場合は$HOME/bin、プロンプトが表示されます。

david@foo-sys:~/bin$ 

ユーザーがにいる場合/usr/bin、プロンプトは次のようになります

david!@foo-sys:/usr/bin$

Kornshellでは、これらのエスケープシーケンスを使用することはできません。代わりに、コマンドのエイリアスcdを作成し、プロンプトを設定するcd関数を使用します。または、$(..)構文を使用します。Kornshellを使用していますが、プロンプトは次のようになります。

PS1=$(print -n "`logname`@`hostname`:";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "\n$ ")

やっかいですね。BASHでは、これを行うことができました。

PS1="\u@\h:\w\n$ "

とにかく、KornshellユーザーがBASHを使用するときは、エスケープシーケンス$COMMAND_PROMPTを使用する代わりに変数を設定するのが一般的です。これは、それが彼らの知っている方法だからです。そして、それを行うと、プロンプトコマンドが毎回印刷されます。たとえば、次のようにBASHプロンプトを設定できます。

PROMPT_COMMAND="print -n "`logname`@`hostname`:";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "\n$ "

設定するとset -x、毎回そのプリントが表示されます。

あなたがすべきことは、$HOME/.bash_profileまたはそれが存在しない場合は$HOME/.profileファイルに移動し、設定されている行を削除することですPROMPT_COMMAND。代わりに、次のように変更します。

PS1="\e]0\u@\h:\w\a$ "

これは多かれ少なかれ同じプロンプトです。.profileまたはを変更したくない場合は、次の.bash_profileようにします。

$ unset PROMPT_COMMAND
$ PS="\e]0\u@\h:\w\a$ "

もう1つの可能性:プロンプトがに設定されていないか$HOME/.bash_profile$HOME/.profileまたはに設定されていない可能性があります$HOME/.bashrc。その場合、Kornshellの担当者であるシステム管理者がいて、/etc/profileファイルにプロンプ​​トが設定されています。$HOME/.bash_profileファイルの最後に上記の2行を追加して、ファイルのプロンプト設定を自分で上書きする必要があります。

于 2012-12-21T16:50:36.843 に答える
0

これは、実際の$PROMPT_COMMAND変数のようです。代わりに使用したい場合があります$PS1

http://www.gnu.org/software/bash/manual/bashref.html#index-PPIDを参照してください。

于 2012-12-21T15:16:38.733 に答える