入力するすべてのコマンドに対してLinuxコンソールでbash -xをオンにすると、この出力が得られます。
printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
これはかなり面倒です。どうすればオフにできますか。
前もって感謝します
このコマンドは、ターミナル エミュレータのタイトルを変更するためのエスケープ シーケンスを出力します。だから私はそれがあなたの.bashrc
または.bash_profile
when TERM
matchで設定されていると思いますxterm*
。そこを見て、コードにコメントしてください。
bash -x
コマンドは、たとえそれが印刷の一部であっても、呼び出されたすべてのコマンドを表示するため、印刷され$PS1
ます。そのため、対話型シェルで使用したくない可能性set -x
がありますが、コードをスクリプトに入れset -x
、最初とset +x
最後に追加する必要があります (必要でない場合はオプションsource
)。
問題は理由ではなく、修正方法でした。bash プロンプトで次のように入力します。
unset PROMPT_COMMAND; PS1='\w> '
今なぜ。コマンドはPROMPT_COMMAND
、すべての bash コマンドの後に評価されます (設定されますPS1
)。通常、このアクティビティは表示されません。しかし、-x
あなたと一緒にできます。
を使用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行を追加して、ファイルのプロンプト設定を自分で上書きする必要があります。
これは、実際の$PROMPT_COMMAND
変数のようです。代わりに使用したい場合があります$PS1
。
http://www.gnu.org/software/bash/manual/bashref.html#index-PPIDを参照してください。