以下作品:
$ zip -rj /the/absolute/path/tmp{.zip,}
它生成了一个名为 tmp.zip 的文件,省去了我重复文件夹名称作为 zip 存档名称的麻烦。
在我的步枪.conf(游侠特定配置文件)中,我有:
!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 --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"
foo{bar,cbs}baz
变成的大括号展开foobarbaz foocbsbaz
是bash
在解释命令行时完成的。所以最可能的解释是,自从升级后,ranger
不再bash
用于执行命令。遗憾的是,
ranger
似乎没有记录它使用哪个 shell 来解释命令rifle.conf
或是否会受到影响。您可以尝试在不同的地方设置SHELL
环境变量/bin/bash
,看看是否有帮助。#!/bin/bash
如果一切都失败了,请编写一个以您的命令开头的包装器 shell 脚本。这里实际发生的是,游侠会做一件事,如果您通过快捷方式执行文件,那么事情就会按照配置执行。对于 shell,这意味着调用“sh”。
在以前的 Linux Mint 版本中,sh 只是符号链接到 bash,因此该快捷方式在实践中用作“bash”,即使在引擎盖下它被定义为 sh。
但是在较新的版本中,sh 不再与 bash 符号链接,因此您会得到不同的 shell,并且 bash 脚本会引发奇怪的错误,因为快捷方式不会将它们作为 bash 执行。
然后修复是在快捷方式配置(rifle.conf)中将配置从 sh 更新为 bash。
我通过不使用 zip 而是使用 apack 来解决它。
这有效: