feh命令允许您递归地查看文件夹中的图像:
feh --recursive --auto-zoom
在查看图像时,它还允许您将自定义命令与键盘上的键 0-9 相关联。例如,如果我希望终端输出我正在查看的图像的文件名(到终端),我可以通过在显示图像时按零键来实现,方法是运行feh
如下--action
参数:
feh --recursive --auto-zoom --action "echo '%f'"
--action
将命令绑定echo '%f'
到零键。%f
是相对路径,输出时看起来像这样./filename.jpg
。
但是,我需要feh
给我绝对路径而不是相对路径。所以,我需要切断那个点,然后将剩下的附加到pwd
.
这是我的尝试:
feh --recursive --auto-zoom --cache-size 2048 --action "echo $(pwd)$(echo '%f' | cut -c 2-)}"
但输出如下所示:
/absolute/pathf
(注意密码末尾的“f”)
我怎样才能实现这样的输出?:
/absolute/path/filename.jpg
做就是了:
那是:
feh
(而不是feh
与 相同的任何内容.
),因此它将为您提供其中文件的完整路径。%F
,而不是%f
正确完成引用(您'%f'
会阻塞包含'
字符的文件名,这甚至会使其成为任意命令执行漏洞(例如,想象一个名为';reboot #.jpg
或更糟的文件))。echo
which 通常不能用于显示任意数据。%
我们需要传递给的文字printf
必须被转义为%%
(%s
单独将扩展feh
为文件的大小)。feh
。论点将是字面意思:printf "%%s\n" %F
。这告诉feh
调用一个 shell (/bin/sh
) 来解释带有 3 个参数的代码:sh
,-c
并且该代码%%
更改为%
并更改为语法中%F
正确引用的文件的路径,并且反过来,将调用(在大多数实现中内置)和文件的完整路径作为参数。sh
sh
printf
sh
printf
%s\n