我已经开始使用fish
了,我知道fish
和常规bash(我使用了mac终端)之间有两个主要的区别。
我的一些化名不起作用,我能修复。但是,我无法修复以下问题。基本上,我想删除所有与给定扩展名匹配的文件。
alias texclr=rm -v *.aux *.log *.out *.spl *.bbl *.synctex.gz *.blg *.lof *.lot *.tdo *.toc *.idx *.nav *.snm *.a* *.g* *.l* *.ist *.run.xml *-blx.* *.fff *.bcf
但是,它似乎不起作用,并在第一次出现不匹配的文件时产生错误。
我的问题是:
有没有办法删除文件,如果存在(最好是一个班轮)?
这在概念上是不是相当错误?
任何指针都是有用的。
最佳答案
自2.3.0版以来,Fish将打印一个错误,并且不会对每个命令执行取消匹配globs的命令,除了for
、set
和count
。
这意味着您应该将匹配的文件分配给
set -l files *.aux *.log # and so on
因为这需要第二个命令,所以它应该是一个完整的函数而不是别名(在fish中,别名只是函数的语法糖):
function texclr
set -l files *.aux *.log *.out *.spl *.bbl *.synctex.gz *.blg *.lof *.lot *.tdo *.toc *.idx *.nav *.snm *.a* *.g* *.l* *.ist *.run.xml *-blx.* *.fff *.bcf
rm -v $files
end
如果您不想在没有匹配文件的情况下执行
rm
(为了避免出现难看的错误消息),可以使用set -q files[1]; and rm -v $files
。关于bash - 删除 fish 中是否存在,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47155549/