替换linux shell命令

时间:2017-11-10 23:32:54

标签: linux shell csh

假设我有一个命令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可执行文件?

2 个答案:

答案 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"}'`