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(注意pwd结尾处的“f”)
如何才能实现这样的输出呢?
/absolute/path/filename.jpg发布于 2022-01-03 11:18:19
只要做:
feh --recursive --auto-zoom --action 'printf "%%s\n" %F' "$PWD"这就是:
feh (而不是feh将其视为.的任何内容),因此它将为您提供文件的完整路径。%F,而不是%f,以便正确地执行引用(您的'%f'会阻塞包含'字符的文件名,这甚至会使它成为任意命令执行漏洞(例如,一个名为';reboot #.jpg的文件,或者更糟的文件))。echo。printf的文本D19必须转义为%% (%s单独将由feh扩展到文件大小)。feh。争论的字面意思是:printf "%%s\n" %F。这告诉feh调用一个shell (/bin/sh)来解释带有三个参数的代码:sh、-c和带有%%的代码更改为%,而%F更改为sh语法中正确引用的文件路径,sh反过来将调用< code >D36 (这是大多数sh实现中内置的),并将printf、%s\n和文件的完整路径作为参数。发布于 2022-11-05 21:17:33
嗨,斯特凡,谢谢你这个奇妙的回答。
我已经利用了你的一条线,目的是能够标记文件在我最喜欢的终端文件经理,护林员,而在feh内。为此,我使用了以下参数:
feh -FZd --action 'printf "%%s\n" %F' "$PWD" >> ~/.local/share/ranger/tagged image.jpgRanger通过将文件路径添加到文本文件的末尾来存储标记的图像。当您卸载图像标记时,它将移除此文件路径。
然而,我遇到了一个问题,当集成到护林员的文件打开器/执行器,来福枪。来福枪基本上是一个文件执行器,它做一些文件类型的检查,以确定您想要使用什么来打开一个文件。我在步枪上加上了上面的一个衬里,就像这样:
mime ^image, has feh, X, flag f = feh -FZd --action 'printf "%%s\n" %F' "$PWD" >> ~/.local/share/ranger/tagged -- "$@"标志f分叉进程,X告诉它图形环境是可用的。然后是哑剧类型。所有这些都不会引起任何问题。打破我的论点的部分是最后的$@。
这对于告诉游侠打开当前聚焦的文件也很重要,而不仅仅是从目录的顶部开始。不幸的是,通过将这个环境变量添加到参数中,而不是将整个文件路径追加到~/..local/share/ranger/标记文件的末尾,它只会追加文件名。
例如:
这个: /home/$USER/photos/IMG_20221023_102228_HDR~2.jpg
变成这样: IMG_20221023_102228_HDR~2.jpg
我不知道为什么会发生这种情况,但我知道这与$@环境变量有关。如果我删除$@并将其替换为$1 (代替引用第n个选定的文件),我的参数再次正确工作,正如前面提到的,feh从目录的顶部开始,而不是在焦点文件上。
对不起,我不能解释得更好了。我希望这是合理的。希望这件事能正常运作!
我知道我不应该在这里问问题..。虽然有了一点帮助,但这很可能会成为某人的答案,因为它仍然与最初的问题密切相关。
https://unix.stackexchange.com/questions/684802
复制相似问题