我使用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。我怎么能用鱼做呢?
答案 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