如果存在于鱼中则移除
remove if exists in fish
我已经开始使用 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
但是,它似乎不起作用,并且在第一次出现不匹配文件时会产生错误。
我的问题是:
- 有什么方法可以删除文件(如果存在的话)(最好是一个衬里)?
- 概念上是不是有点错误?
任何指针都会有所帮助。
Fish,自版本 2.3.0 起,将打印错误并且不执行除 for
、set
和 count
之外的每个命令的不匹配 globs 命令。
这意味着您应该将匹配的文件分配给具有
的变量
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
.
我已经开始使用 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
但是,它似乎不起作用,并且在第一次出现不匹配文件时会产生错误。
我的问题是:
- 有什么方法可以删除文件(如果存在的话)(最好是一个衬里)?
- 概念上是不是有点错误?
任何指针都会有所帮助。
Fish,自版本 2.3.0 起,将打印错误并且不执行除 for
、set
和 count
之外的每个命令的不匹配 globs 命令。
这意味着您应该将匹配的文件分配给具有
的变量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
.