4

PNGファイルとして保存されたグラフがたくさんあります。それらのほとんどはあまり役に立ちませんが、いくつかは非常に役に立ちます。

それらを一度に 1 つずつ表示し、y または n を押すのを待つスクリプトを書きたいと思います。n を押したら削除します。そうでない場合は、次のものに進みます。

私は2つの問題に直面しています。

最初に、feh は新しいウィンドウを開くので、y または n を押すために alt-tab でシェルに戻る必要があります。別のウィンドウでのキー押下を含む任意のキー押下を bash にリッスンさせることは可能ですか?

次に、read を使用して文字をリッスンしようとしましたが、-n は有効なオプションではないと表示されます。ただし、同じ行は端末で正常に機能します。

これを行う方法はありますか?助けに感謝します。

#! /bin/sh                                                                                                                                                               

FILES=./*.png
echo $FILES
for FILE in $FILES
do
    echo $FILE
    feh "$FILE" &
    CHOICE="none"
    read -p "d to delete, any other key to keep: " CHOICE -n 1 -s
    killall feh
    if [$CHOICE -eq "d"]
    then
        rm $FILE
    fi
done
4

1 に答える 1

2

これはあなたの質問に接するだけかもしれませんが、スクリプトは/bin/sh実行に (POSIX シェル) を使用するように設定されていますが、おそらく対話型ターミナル シェル/bin/bashとして使用しています。使用しているシェルによって処理が異なります。read

read1 つのコマンド 3 つの異なるシェルの出力を次に示します。dashシェルは私のシステムで使用されていますが、 asと as/bin/shが呼び出されたときに同じように処理されることを確認するために、それぞれの名前で 1 回ずつ、2 回実行しました。shdash

$ bash
$ read -p "d to delete, any other key to keep: " CHOICE -n 1 -s
d to delete, any other key to keep: d
bash: read: `-n': not a valid identifier
$ exit
$ dash
$ read -p "d to delete, any other key to keep: " CHOICE -n 1 -s
d to delete, any other key to keep: d
read: 1: -n: bad variable name
$ 
$ pdksh
$ read -p "d to delete, any other key to keep: " CHOICE -n 1 -s
pdksh: read: -p: no coprocess
$ $ sh
$ read -p "d to delete, any other key to keep: " CHOICE -n 1 -s
d to delete, any other key to keep: d
read: 1: -n: bad variable name
$ 
$ 
于 2012-04-22T23:43:24.330 に答える