能否制作三明治别名?

我正在寻找一种方法,使以下别名适用于任何文件名。
alias dim='cd /home/jason/Documents; vim *the desired file*; cd'

我在想是否有办法可以更改这个别名,使得我可以输入任何文件名。
dim *the desired file*

还能得到相同的结果。 基本上,是否有一种方法可以将别名后面键入的内容调用到别名本身? 类似于:
alias dim='cd /home/jason/Documents; vim <what is typed after alias>; cd'

这是什么意图? - Nathan Basanese
2个回答

不,你不能使用shell别名来做那个。你需要使用一个函数。
这里有一个简单的函数来完成这个任务:
dim() {
cd /home/jason/Documents
vim "$1"
cd
}

函数dim将接受一个文件名作为参数。您可以将此代码片段放在您的~/.bashrc文件的末尾,然后运行它:
dim file.txt

file.txt替换为您想要的任何文件名。

要从当前shell会话中运行它,请首先source ~/.bashrc文件:

. ~/.bashrc

3"$1"代表什么意思?我是个初学者,想要学习而不只是复制粘贴就完事了。 - Jason Basanese
1@JasonBasanese 我很欣赏你的决定 :) $1 表示函数的第一个位置参数或参数..可以将其视为向函数或脚本提供输入的一种方式..就像所有编程语言一样,bash 也使用这个..你可以在谷歌上找到很多关于这方面的资源.. - heemayl

不要使用别名,使用函数代替。

Bash man page中:

别名

[...] 没有机制在替换文本中使用参数。如果需要参数,则应使用 shell 函数(参见下面的 函数)。

因此你的函数可以是:

function dim () { cd ~jason/Documents ; vim $* ; cd - ;}


1在这种情况下,使用~/Documents会不会挺好?还有,在这个情况下,$和*符号是什么意思?cd后面的-是否必要?通常我只需输入cd就能返回上一级目录。 - Jason Basanese
йҖҡеёёжҲ‘еҸӘйңҖиҰҒиҫ“е…Ҙcdе°ұеҸҜд»Ҙиҝ”еӣһдёҠдёҖзә§зӣ®еҪ•пјҢиҖҢcd ..еҲҷжҳҜиҝ”еӣһдёҠдёӨзә§зӣ®еҪ•гҖӮеҸҰеӨ–пјҢcd -еҸҜд»ҘеёҰдҪ еӣһеҲ°д№ӢеүҚдҪҝз”Ёcdе‘Ҫд»Өиҝӣе…Ҙзҡ„зӣ®еҪ•гҖӮ - Chriki
1@JasonBasanese:是的,对于所有用户来说,~/Documents都可以工作(如果这是一个适用于所有用户的函数)。$*就像$1 $2 $3...一样,只是将整个列表传递给vim,而不是你输入的第一个参数。正如Chriki所说,cd -会返回到上一个目录(在调用函数时所处的目录)。 - CijcoSistems