' testdir必须是绝对的路径'使用' ls'鱼壳中的命令

时间:2018-01-22 05:57:23

标签: linux shell ubuntu fuse fish

每次我在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

确实,正在运行dmesg | grep fuse会显示:

[    3.771372] fuse init (API version 7.26)

当我在bash或zsh中运行ls时,消息" testdir must be an absolute path"运行ls时不会显示。我还通过strace调用ls调用和fish进程,在调查问题方面做了其他最小的尝试,但没有成功。

此字符串来自何处,如何阻止它?

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

1 个答案:

答案 0 :(得分:2)

Fish提供了一个ls包装函数,如果输出为tty,则打开颜色和指示符(即如果isatty返回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是可能的,并且运行command test,它也是候选者。使用type找出鱼的调用,然后改变它。

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