Shell 存在具有特定类型的文件的测试

Shell 存在具有特定类型的文件的测试,shell,fish,Shell,Fish,在fish中,您可以使用test-e hello.txt测试特定文件是否存在,但我想知道是否有一种方法可以在文件名中使用通配符值来检查文件类型是否存在 更具体地说,我正在制作一个快速函数,用于检查Xcode工作区,如果找到,则打开它,如果没有,则检查Xcode项目,如果找到,则打开它,否则打印错误 以下是当前的实施情况: function xcp open *.xcodeproj end function xcw open *.xcworkspace end function

在fish中,您可以使用
test-e hello.txt
测试特定文件是否存在,但我想知道是否有一种方法可以在文件名中使用通配符值来检查文件类型是否存在

更具体地说,我正在制作一个快速函数,用于检查Xcode工作区,如果找到,则打开它,如果没有,则检查Xcode项目,如果找到,则打开它,否则打印错误

以下是当前的实施情况:

function xcp
    open *.xcodeproj
end

function xcw
    open *.xcworkspace
end

function xc
    if test -e *.xcworkspace
        xcw
    else if test -e *.xcodeproj
        xcp
    else
        echo "No Xcode Workspace or Project in this directory."
    end
end
它在一分钟内“工作”,但当它找不到工作区或项目文件时,它会打印一个关于没有匹配项的错误。不过,这是默认情况下完成的,我想知道是否可以以某种方式隐藏它

以下是错误输出,当它找不到工作区,但找到项目并打开时:

No matches for wildcard '*.xcworkspace'.  (Tip: empty matches are allowed in 'set', 'count', 'for'.)
~/.config/fish/functions/fish_prompt.fish (line 1): if test -e     *.xcworkspace
                                                           ^
in function 'xc'
    called on standard input
试着数一数:

function xc
    set -l workspaces *.xcworkspace
    set -l projects   *.xcodeproj
    if test (count $workspaces) -gt 0
        xcw
    else if test (count $projects) -gt 0
        xcp
    else
        echo "No Xcode Workspace or Project in this directory."
    end
end

有关允许使用空全局扩展的上下文的说明,请参阅。您可以简单地使用
^/dev/null
重定向stderr,但我不推荐这样做。特别是因为如果glob匹配多个文件,那么您的
test
命令将失败。尽管我会避免使用
test
命令,但上面的Glenn解决方案是我将如何做到这一点。相反,如果set-q workspaces[1]测试$workspaces至少有一个元素,我会执行