1

Tclで次の行を実行したい:

exec awk -F"[][]" '/dB/ { print $2 }' <(amixer sget Master)

エラー:missing close-braceが表示されます。

次に、これを変更しました:

exec awk -F"[][]" {/dB/ { print $2 }} <(amixer sget Master)

中括弧で一重引用符を変更します。エラーは次のとおりです。

ファイルを読み取れませんでした"(amixer": no such file or directory

それから私はこれに変更しました:

exec awk -F{[][]} {/dB/ { print $2 }} <(amixer sget Master)

それでも後者と同じエラーです。

コマンドの tcl 解析メカニズムに本当に苦労していexecます。助けてください。ありがとうございました。

amixer sget マスター出力:

  Capabilities: pvolume pvolume-joined pswitch pswitch-joined
  Playback channels: Mono
  Limits: Playback 0 - 64
  Mono: Playback 39 [61%] [-25.00dB] [on]
4

2 に答える 2

0

Thx to Donal Felows 問題はシェルの引用ではなくtcl構文あることがわかりました。そこで、回答全体を修正して、次のことを提案しました。

exec /bin/bash -c {amixer sget Master | awk -F"[][]" '/dB/{print $2}'}

または、パイプの代わりにプロセス置換を使用したい場合:

exec /bin/bash -c {awk -F"[][]" '/dB/{print $2}' <(amixer sget Master)}

両方の行は構文を使用してコードを解釈{...}からエスケープし、その間に通常のコードを許可します。bashtclbash

tcl基本的にすべての作業を からにシフトするため、これが最善の方法であるかどうかはわかりbashませんが、少なくともこれは私にとっては機能しています ( tcl8.5.13-r1、GNU bash4.2.45(1) および GNU awk4.0を使用) .1)。

于 2013-09-06T08:10:54.093 に答える