'testdir must be an absolute path' 在 fish shell 中使用 'ls' 命令后打印

'testdir must be an absolute path' printed after using 'ls' command in fish shell

每次我在 fish shell 中使用 ls 命令时,它都会生成行“testdir must be an absolute path”,然后再像往常一样列出目录的内容 ls 调用就可以了。无论我所在的目录或传递给 ls.

的选项如何,都会发生这种情况

我在我的系统和互联网上搜索了这条消息,我在一个 libfuse 的测试中找到了它 files。 运行 ps -ef | grep fuse 产生:

mdko 3498 3430 0 20:36 ? 00:00:00 /usr/lib/gvfs/gvfsd-fuse /run/user/1000/gvfs -f -o big_writes

的确,运行ning dmesg | grep fuse 显示:

[    3.771372] fuse init (API version 7.26)

当我运行ls在bash或zsh时,运行ningls时不会出现“testdir must be an absolute path”的消息.我还通过 strace-ing ls 调用和 fish 过程进行了其他最小尝试来调查问题,但没有成功。

这个字符串是从哪里来的,我该如何阻止它?

(运行 Ubuntu 17.10 64位,小鱼2.6.0版)

Fish 提供了一个 ls 包装函数,如果输出要发送到 tty(即如果 isatty returns true),它会打开颜色和指示器。

很可能,您有一个命令或函数覆盖了此处的某些内容。

检查 type ls 的输出以查看 ls 函数的定义:

ls is a function with definition
# Defined in /usr/share/fish/functions/ls.fish @ line 6
function ls --description 'List contents of directory'
    set -l param --color=auto
    if isatty 1
        set -a param --indicator-style=classify
    end
    command ls $param $argv
end

由于您的 "ls" 命令在 bash 中有效,所以可能不是这样(运行 command ls --color=auto --indicator-style=classify somedir 确认)。

所以你会检查其他命令。 set 可能不是,因为如果它被覆盖,您将遇到更大的问题。 isatty是可能的,那运行s command test也是一个候选。使用 type 找出鱼在叫什么,然后改变它。

例如有可能你在某个地方有一个 test 命令,它不是 POSIX 风格的 test,而是 运行 libfuse 测试的东西。如果是这样,请重命名或删除它。