[英]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.