Bashプロンプト - マルチバイトUnicode文字の8進表現はプロンプトで機能しますが、手動で実行すると機能しません(同じスクリプト)。

Bashプロンプト - マルチバイトUnicode文字の8進表現はプロンプトで機能しますが、手動で実行すると機能しません(同じスクリプト)。

シェルスクリプトmyPrompt.shが与えられたら:

#!/bin/bash

printf "Llama \001\360\002\001\237\002\001\255\002\254 Llama $> "

...そしてbashプロンプトは上記のスクリプトを実行するように設定されています。

alias myPrompt="/home/you/myPrompt.sh"
PS1="\$(myPrompt)"

上記のシナリオでは、関数は[を使用して実行され、出力を生成します。

ベストアンサー1

\[シェルは、プロンプトを処理するときにプロンプ​​トの幅がゼロの部分をコメントアウトするなどの操作を実行するときにいくつかのシーケンス(たとえば、および)を使用しますが、これらの文字は直接印刷するとこのように解釈されません。\]私は驚き、あなたが気づいた方法で\001動作します\002。しかし、それはあなたが使用する文字エンコーディングとより関連性があるかもしれませんか?

とにかく、何かを印刷して設定せずにプロンプ​​トでどのように見えるかを確認するには、bashの変数拡張Pに(プロンプト用)演算子を使用できます。

SOME_PROMPT_STRING="\u@\h:\W\$"
echo "${SOME_PROMPT_STRING@P}"

おすすめ記事