ターミナルエスケープコードを含むDebianのシェル変数の内容をそのまま見たいです。echo
内容を確認しようとすると、すべての端末エスケープが端末によって解釈され、色が表示されます。
➜ sds git:(master) echo $PS1
%(?:%{%}➜ :%{%}➜ ) %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)
シェル変数の内容をそのまま印刷できますか?それとも、内容をそのまま表示するには、変数を設定する正確なスクリプトを見つける必要がありますか?
答え1
ようにテルドン と言う、他の変数の値を使用して変数を設定した場合、その変数の元の設定を元に戻すことはできません。
しかし、少なくともBashとZshでは、端末やシェル自体で解釈されていない内容を見ることができます。
printf '%q\n' "$PS1"
これにより、他の効果を持つすべての文字がエスケープされます。これを使用して、逐語的な内容を再構成できます。
別のアプローチは、変数の内容を端末以外の場所に(直接)出力することです。
printf %s "$PS1" | od -vtc
変数の内容を文字単位で表示し、制御文字をニーモニック(、、nl
... )に置き換えます。esc
sp
する〜いいえecho
シーケンスを展開し\x
て改行を追加するには、ここを使用してください。
あなたの場合
%(?:%{%}➜ :%{%}➜ ) %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)
変数の逐語的内容である可能性がありますPS1
。端末で解釈されたエスケープがなく、オプションが設定されていると仮定すると、プロンプトを表示するために使用されるときに拡張されます。しかし、拡張されたときはそうではありません。fg
reset_color
promptsubst
PS1
echo $PS1
答え2
変数の内容には、使用しているすべての変数の拡張値が含まれます。ソースは値を拡張するためにのみ使用されるため、ソースに戻ることはできません。
たとえば、次のことを考えてみましょう。
fooVar="foo"
barVar="$fooVar : bar"
シェルが設定されているときはすでにに設定されておらず、に設定されていますbarVar
。に戻る方法はありません。変数は、新しい変数に値として割り当てられる前に拡張されました。結局のところ、変数の使用のポイントは、変数を値として扱うことができるということです。$foovar
barVar
$fooVar : bar
foo : bar
"$fooVar : bar"
$vooVar
barVar
したがって、いいえ、すでに拡張して使用している「拡張されていない」変数をビンに戻す方法はありません。どの変数が使用されているかを確認する唯一の方法は、その変数を含むPS1
さまざまなファイルを追跡することです。セット。