每次我在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)
答案 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测试的东西。如果是这样,请重命名或删除它。