繁体   English   中英

鱼壳-删除文件并执行命令

[英]Fish shell - remove file and execute command

我想执行简单的命令

rm -f *.zip or true ; and date

意味着我想删除当前路径中的所有zip文件并显示当前日期。 我还是想看看日期。 即使没有这样的文件。

我会在bash中这样做:

rm -f *.zip || true; date

这就是我的鱼:

在此处输入图片说明

更新

阅读文档我发现

在此处输入图片说明

结果证明(我不敢相信)

我应该将简单的rm -f *.zip编写为

set files *.zip
   if count $files > /dev/null
     rm -f *.zip
end

我对这种解决方案感到非常不满,

一定有更好的东西

我尝试过的更新

rm -f "*.zip"; date  

但是它不会删除文件,因为不会发生扩展

更新资料

我虽然在函数中隐藏表达式

                    function rmf
                    set files $argv
                    set quantity (count $files)
                        if [ $quantity -gt 0 ]
                            echo "yes";
                            rm -f $files
                        else
                          echo "not enough"
                    end  
                end

但是问题是rmf函数没有被视为count函数

我同意,这是一个令人沮丧的案例。 fish的通配符扩展行为几乎总是更好(尝试使用bash中的touch *.zip来查看原因),这是非常重要且令人讨厌的rm例外。

可能最简单的解决方法是:

set tmp *.zip ; rm -f $tmp ; date
set files *.zip
set -q files[1]
and rm -f $files
date

最终命令:

rm -f *.zip ; date   

当我遇到使用鱼2.2的问题时,它在鱼2.6中可以正常工作。 他们在以后的版本中更改了行为。

加上一些警告:

无需日期之前,它的行为就像&&在bash因此它会忽略

是的,它会产生错误,但它应该执行的操作

看到这个问题https://github.com/fish-shell/fish-shell/issues/683

确切说明原因:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM