是否可以使用sandalias别名?


8

我正在寻找一种使以下别名适用于任何文件名的方法。

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)

Answers:


8

不,您不能使用shell别名来做到这一点。您需要使用一个功能。

这是完成这项工作的简单功能:

dim() {
cd /home/jason/Documents
vim "$1"
cd
}

该函数dim将以文件名作为参数。您可以将此代码段放在~/.bashrc文件末尾,然后按以下方式运行它:

dim file.txt

file.txt用所需的任何文件名替换。

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

. ~/.bashrc

3
“ $ 1”代表什么?我是一个初学者,我尝试学习而不是仅仅复制粘贴并称之为一天。
杰森·巴桑尼斯

1
@JasonBasanese我感谢您的决定:) $1表示函数的第一个位置参数或参数。将其视为向函数或脚本提供输入的一种方式。像所有编程语言一样,bash....您会有关这方面的大量资源,在谷歌..
heemayl

3

不要使用别名,而应使用函数。

Bash手册页中

别名

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

因此,您的功能可能是:

功能dim(){cd〜jason / Documents; vim $ *; cd-;}


1
〜/在这种情况下,文档工作正常吗?在这种情况下,$和*符号还意味着什么?并且-需要CD之后吗?通常,我只能键入cd,它会进入一个目录。
Jason Basanese 2015年

“通常,我只需要键入cd即可进入目录” –我只知道一个普通cd的带您到主目录的地方;cd ..上一层。cd -将您带到您所在的上一个目录cd
Chriki 2015年

1
@JasonBasanese:是的〜/文档对所有人都适用(如果它对所有用户都有效)。$*就像$1 $2 $3...只是将整个列表提供给vim,而不是您输入的第一个参数。就像Chriki所说的,cd -将返回到上一个目录(调用该函数时的目录)。
CijcoSistems 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.