假设我有一个命令convertImage,它接受一些输入jpeg,并在同一目录中吐出一个新的png:
convertImage --format png photo.jpg -o photo.png
我想创建一个别名“convertToPng”,它只需要一个arg,即文件:
convertToPng photo.jpg
我目前的解决方案是:
alias convertToPng "convertImage --format png \!:1 -o \!:1.png"
但是,这会将输出文件命名为“photo.jpg.png”,我希望将其命名为“photo.png”。有没有办法先解析文件名,然后将其传递给convertImage可执行文件?
答案 0 :(得分:0)
如果你的输入总是jpg那么
convertToPng photo
alias convertToPng "convertImage --format png \!:1.jpg -o \!:1.png"
或将扩展名作为第二个参数
convertToPng photo jpg
alias convertToPng "convertImage --format png \!:1.\!:2 -o \!:1.png"
或最后一个选项
convertToPng photo.jpg
alias convertToPng "convertImage --format png \!:1 -o `echo $1 | cut -f1 -d'.'`.png"
或在.bashrc
中编写一个函数,如下所示
function convert()
{
convertImage --format png $1 -o `echo $1 | cut -f1 -d'.'`.png;
}
并执行function
以上
convert photo.jpg
我更喜欢function
方式,因为它为aliases
提供了很大的灵活性,你可以做的不仅仅是一个陈述。
答案 1 :(得分:0)
echo photo.jpg | awk -F. '{print $1".png"}'
这可以在命令行调用中使用,如下所示:
$ convertImage --format png photo.jpg -o `echo photo.jpg | awk -F. '{print $1".png"}'`