ルートウィンドウのタイトル、つまりxsetroot -name "clever words"
を設定することで適用される情報テキストを、WMバーに入力しているときに、この興味深い問題に遭遇しました。
この目的のために、大金を印刷することは端末でうまく機能します:
fortune -s | while read -r; do xsetroot -name "$REPLY"; done
しかし、シェルスクリプトから実行すると、同じことが失敗します。
#!/bin/sh
cat /tmp/afile | while read; do echo "$REPLY"; done
生産物:
$ sh afilereader
afilereader:2:読み取り:引数カウント
もちろん、これは、幸運の結果を変数に割り当ててから、その変数でxsetrootを使用することで解決されます。それでも、理由を理解したいのですが これはスクリプトでは機能しません。
パイプラインのいずれかの側の各コマンドがそれ自体のサブシェル内で実行されていることはわかっていますが、ローカライズされた変数がwhile読み取りループにどのように影響するかを確認できません。または、ループの反復間でも変数が範囲外ですか?
何が足りないのですか?
更新: sh
私が使用したのはダッシュにリンクされており、POSIXに準拠するようになっています。より由緒あるbash
を使用する これを解決しました。
承認された回答:
bash
で最初の例を実行しているようです 、および/bin/sh
が指すものの2番目 、これは、入力を入れたい変数を指定する引数を渡す必要があるPOSIXシェルです。シバンを#!/bin/bash
に変更します これを修正する必要があります。