例:
私が走るとき
echo -e "\[\033[;33m\][\t \u (\#th) | \w]$\[\033[0m\]"
印刷された応答は次のとおりです。
\[\][ \u (\#th) | \w]$\[\]
最初から最後までの
\[
すべては\]
オレンジ茶色です。ただし、コマンドプロンプトを次のように設定すると、
\[\033[;33m\][\t \u (\#th) | \w]$\[\033[0m\]
コマンドプロンプトは次のように印刷されます。
[21:55:17 {username} (89th) | {current directory path}]$
完全なコマンドプロンプトはオレンジ - 茶色です。
とにかく私の質問は次のとおりです。コマンドプロンプトデザイン(などecho
)をコマンドプロンプトであるかのように印刷できますか?cat
less
答え1
Bash 4.4+では、引用したコンテンツを生成する${var@P}
方法と同様に使用できます。${var@Q}
var
3.5.3 シェルパラメータの拡張マニュアルページの下部にあります。
$ printf "%s\n" "${var}"
\[\033[00;32m\]\w\[\033[00m\]\$
$ printf "%s\n" "${var@P}" |od -tx1z
0000000 01 1b 5b 30 30 3b 33 32 6d 02 2f 74 6d 70 01 1b >..[00;32m./tmp..<
0000020 5b 30 30 6d 02 24 0a >[00m.$.<
0000027
またはなしで後者を実行している場合は、od
現在のパスを緑色で表示する必要があります。
and for andを印刷します\001
。これらはあなたにとってあまり役に立たないかもしれません。一時変数と文字列置換拡張を使用してそれらを削除できます。\002
\[
\]
$ printf -v pst "%s\n" "${var@P}"
$ pst=${pst//[$'\001\002']}
$ printf "%s\n" "$pst" |od -tx1z
0000000 1b 5b 30 30 3b 33 32 6d 2f 74 6d 70 1b 5b 30 30 >.[00;32m/tmp.[00<
0000020 6d 24 0a 0a >m$..<
0000024
Zshには次のものがありますprint -P
。
$ print -P "%F{green}%d%F{normal}%#" |od -tx1z
0000000 1b 5b 33 32 6d 2f 74 6d 70 2f 61 61 61 1b 5b 33 >.[32m/tmp/aaa.[3<
0000020 39 6d 25 0a >9m%.<
とパラメータ拡張フラグは上記のBashと似ている%
ので、結果の文字列を。${(%)var}
${var@P}
print -v othervar -P "..."
othervar=${(%)var}
othervar
\u
Bashのような場合はandを代わりに\w
使用できますが、orの場合は簡単ではないかもしれません。$USER
$PWD
\#
\j