4

我有一堆保存为 png 文件的图形。它们中的大多数不是很有用,但有些非常有用。

我想编写一个脚本,一次显示它们,然后等待我点击 y 或 n。如果我点击n,请删除它。如果没有,请继续下一个。

我遇到了两个问题。

首先,feh 打开一个新窗口,所以我必须按 alt-tab 键回到我的 shell 中才能按 y 或 n。是否可以让 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 shell)执行,但您可能正在/bin/bash用作交互式终端 shell。read根据您使用的外壳,处理方式不同:

这是您的一个命令的输出,read三个不同的外壳;dashshell 用于我的/bin/sh系统,但为了确保它在调用 assh和 as时处理相同dash,我运行了两次,每个名称一次:

$ 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 回答