检查argv是否是目录

时间:2014-11-12 17:16:23

标签: function shell directory fish

我使用FISH(友好交互式SHell)

我创建了2个函数:

function send
    command cat $argv | nc -l 55555
end

- >通过nc发送文件

function senddir
    command tar cjf copy.tar $argv; cat copy.tar | nc -l 55555; rm copy.tar
end

- >通过nc压缩它来发送目录

现在,我不想重构并创建一个同时执行这两者的发送功能,为此我需要检查argv是否为dir。我怎么能用鱼做呢?

3 个答案:

答案 0 :(得分:2)

与其他shell相同,虽然在fish中你实际上使用的是外部程序,而不是内置的shell。

function send
    if test -d $argv
        command tar cjf copy.tar $argv; cat copy.tar | nc -l 55555; rm copy.tar
    else
        command cat $argv | nc -l 55555
    end
end

实际上,您不需要临时文件,可以将tar的输出直接传递给nc -l,这样可以将函数简化为

function send
    if test -d $argv
        command tar cj $argv
    else
        command cat $argv
    end | nc -l 55555
end

答案 1 :(得分:2)

function send
    if test -d $argv
        command tar cjf $argv | nc -l 55555;
    else if test -e $argv
        command cat $argv | nc -l 55555;
    else
        echo "error: file/directory doesn't exist"
    end
end

答案 2 :(得分:2)

请注意$argv数组,因此如果您传递多个参数,test将会禁止。

$ test -d foo bar
test: unexpected argument at index 2: 'bar'

在防守方面进行更多编码:

function send
    if test (count $argv) -ne 1
        echo "Usage: send file_or_dir"
        return

    else if test -d $argv[1]
        # ...

    else if test -f $argv[1]
        # ...

    else
        # ...
    end
end