からインスピレーションを受けるこのフォーラムの投稿、Bashプロンプトで次のコマンドを実行しました。
echo -e '\e]4;40;?\a'
任意の出力:
# 4;rgb:8b8b/cdcd/0000
しかし、奇妙なことは、出力が私のプロンプトの上に印刷されるのではなく、私のプロンプトの次のコマンドになるということです。
"4;rgb:8b8b/cdcd/0000" テキストを変数に保存したいのですが、驚くべきことに次の問題が発生します。
output=$(echo -e '\e]4;30;?\a')
echo "$output"
これと同じ:
echo -e '\e]4;30;?\a' | awk -F ":" ' { print $1 } '
"4;rgb:8b8b/cdcd/0000" 出力を変数に保存またはパイプするにはどうすればよいですか?
助けてくれてありがとう!
。
編集:返信ありがとうございます!しかし、同じ問題が発生します。
out=`eval "echo -e '\e]4;40;?\a'"`; echo $out
。
その後、$ out変数の部分文字列を生成しようとしましたが、 "4; rgb"の代わりに空白行が印刷されました。
substring=${out:0:5}; echo "$substring"
。
私もこれを試しました:
out=`eval "echo -e '\e]4;40;?\a'"`; echo $out | awk -F ":" ' { print $1 } '
awk は "4;rgb" の代わりに空行で応答し、次のコマンドで "4;rgb:8b8b/cdcd/0000" がプロンプトに表示されます。
ベストアンサー1
取得する文字列は4;rgb:8b8b/cdcd/0000
実際にはechoコマンドの出力ではなく、端末エミュレータに送信されたエコー文字列の副作用です。端末エミュレータは、対応する文字を入力したかのように出力して反応します。
シェルはそれを知らないので、空の文字列出力をキャプチャしようとします。
必要なものを達成する1つの方法は次のとおりです。
script -qc "echo -e '\e]4;40;?\a';read foo" /tmp/foo
out=$(tail -1 /tmp/foo)
これのいくつかの説明は次のとおりです。このscript
コマンドは画面に表示されるすべてをキャプチャします。このコマンドは、端末エミュレータが目的の文字列を出力する前にコマンドが完了するのをread foo
防ぎます。script
このtail -1
コマンドは、このコマンドによって生成された不要な行を削除しますscript
。