首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从feh获取绝对路径

从feh获取绝对路径
EN

Unix & Linux用户
提问于 2022-01-03 11:10:29
回答 2查看 394关注 0票数 1

feh命令允许您递归地查看文件夹中的图像:

代码语言:javascript
复制
feh --recursive --auto-zoom

在查看图像时,它还允许您将自定义命令与键盘上的0-9键相关联。例如,如果我希望终端输出我正在查看的图像的文件名(到终端),我可以通过在图像显示时按零键来实现这一点,方法是运行feh并使用--action参数这样做:

代码语言:javascript
复制
feh --recursive --auto-zoom --action "echo '%f'"

--action将命令echo '%f'绑定到零键。%f是相对路径,输出./filename.jpg时如下所示。

但是,我需要feh给我绝对路径,而不是相对路径。所以,我需要切断这个点,然后把剩下的附加到pwd上。

这是我的尝试:

代码语言:javascript
复制
feh --recursive --auto-zoom --cache-size 2048 --action "echo $(pwd)$(echo '%f' | cut -c 2-)}"

但是输出如下所示:

代码语言:javascript
复制
/absolute/pathf

(注意pwd结尾处的“f”)

如何才能实现这样的输出呢?

代码语言:javascript
复制
/absolute/path/filename.jpg
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2022-01-03 11:18:19

只要做:

代码语言:javascript
复制
feh --recursive --auto-zoom --action 'printf "%%s\n" %F' "$PWD"

这就是:

  • 将当前工作目录的完整路径传递给feh (而不是feh将其视为.的任何内容),因此它将为您提供文件的完整路径。
  • 使用%F,而不是%f,以便正确地执行引用(您的'%f'会阻塞包含'字符的文件名,这甚至会使它成为任意命令执行漏洞(例如,一个名为';reboot #.jpg的文件,或者更糟的文件))。
  • 不要使用通常不能用于显示任意数据的echo
  • 我们需要传递给printf的文本D19必须转义为%% (%s单独将由feh扩展到文件大小)。
  • 我们使用单引号(最强引号)将action参数传递给feh。争论的字面意思是:printf "%%s\n" %F。这告诉feh调用一个shell (/bin/sh)来解释带有三个参数的代码:sh-c和带有%%的代码更改为%,而%F更改为sh语法中正确引用的文件路径,sh反过来将调用< code >D36 (这是大多数sh实现中内置的),并将printf%s\n和文件的完整路径作为参数。
票数 2
EN

Unix & Linux用户

发布于 2022-11-05 21:17:33

嗨,斯特凡,谢谢你这个奇妙的回答。

我已经利用了你的一条线,目的是能够标记文件在我最喜欢的终端文件经理,护林员,而在feh内。为此,我使用了以下参数:

代码语言:javascript
复制
feh -FZd --action 'printf "%%s\n" %F' "$PWD" >> ~/.local/share/ranger/tagged image.jpg

Ranger通过将文件路径添加到文本文件的末尾来存储标记的图像。当您卸载图像标记时,它将移除此文件路径。

然而,我遇到了一个问题,当集成到护林员的文件打开器/执行器,来福枪。来福枪基本上是一个文件执行器,它做一些文件类型的检查,以确定您想要使用什么来打开一个文件。我在步枪上加上了上面的一个衬里,就像这样:

代码语言:javascript
复制
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从目录的顶部开始,而不是在焦点文件上。

对不起,我不能解释得更好了。我希望这是合理的。希望这件事能正常运作!

我知道我不应该在这里问问题..。虽然有了一点帮助,但这很可能会成为某人的答案,因为它仍然与最初的问题密切相关。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/684802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档