Ranger:“zip 错误:无需执行任何操作!” - 但是它在 bash 中有效!

Ranger:“zip 错误:无需执行任何操作!” - 但是它在 bash 中有效!

以下工作:

$ zip -rj /the/absolute/path/tmp{.zip,}

它生成了一个名为 tmp.zip 的文件,省去了我重复使用文件夹名称作为 zip 存档名称的麻烦。

在我的 Rifle.conf(Ranger 特定的配置文件)中,我有:

!mime ^text, !ext xml|csv|tex|py|pl|rb|sh|php  = zip -rj "$@"{.zip,}

“$@” 转换为路径。这个方法很好用,我经常用到它。
但是当我尝试它时,我得到的错误是:

zip error: Nothing to do! (/the/absolute/path/tmp{.zip,})

对我来说,这个也很好用。只有在升级我的操作系统和 ranger 后,它才停止工作。所以这里可能我遗漏了一些东西。

$ ranger --version
ranger version: ranger 1.9.3
Python version: 3.8.10 (default, Mar 15 2022, 12:22:08) [GCC 9.4.0]
Locale: en_US.UTF-8

$ cat /etc/upstream-release/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu Focal Fossa"

答案1

括号扩展变成foo{bar,cbs}bazfoobarbaz foocbsbazbash解释命令行时进行的。因此最可能的解释是,自从升级以来,ranger它不再用于bash命令的执行。

遗憾的是,ranger似乎没有记录它使用哪个 shell 来解释命令,rifle.conf或者是否可以影响它。您可以尝试在各个地方将SHELL环境变量设置为,看看是否有帮助。如果其他方法都失败了,请编写一个以命令开头的/bin/bash包装器 shell 脚本。#!/bin/bash

答案2

这里实际发生的事情是,ranger 会执行一项操作,如果您通过快捷方式执行文件,则所有操作都会按照配置执行。对于 shell 来说,这意味着调用“sh”。

在以前的 Linux Mint 版本中,sh 只是符号链接到 bash,因此快捷方式在实践中可以作为“bash”使用,即使在底层将其定义为 sh。

但是在较新的版本中,sh 不再符号链接到 bash,因此您会得到不同的 shell,并且 bash 脚本会抛出奇怪的错误,因为它们没有通过快捷方式作为 bash 执行。

修复方法是只需在快捷方式配置(rifle.conf)中将配置从 sh 更新为 bash。

答案3

我通过不使用 zip 而是使用 apack 来解决这个问题。

这有效:

!mime ^text, !ext xml|csv|tex|py|pl|rb|sh|php  = apack "$@".zip "$@"/

相关内容