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

Chr*_*nah 4 shell fish

在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
Run Code Online (Sandbox Code Playgroud)

它在一分钟"工作",但是当它找不到工作空间或项目文件时,它会输出一个关于没有匹配的错误.然而,这是默认情况下完成的,我想知道我是否可以以某种方式隐藏它.

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

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
Run Code Online (Sandbox Code Playgroud)

gle*_*man 7

试试吧:

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
Run Code Online (Sandbox Code Playgroud)

  • 格伦的上述解决方案是我如何做到这一点,虽然我会避免`test`命令.我宁愿做`if set -q workspaces [1]`来测试$ workspaces至少有一个元素. (3认同)