别名:.bash_rc,.bash_aliases和/ usr / local / bin之间的区别


9

在玩Terminal时,我注意到有很多创建永久别名的方法。

我是Linux新手,据我所知,我正在做:

  1. sudo ln -s /path/to/executable /usr/local/bin/desired_alias
  2. 添加desired_alias = '/path/to/executable'~/.bashrc
  3. 取消注释这些行~/.bashrc

    if [ -f ~/.bash_aliases ]; then
        . ~/.bash_aliases
    fi

    并把desired_alias = '/path/to/executable'~/.bash_aliases

都具有相同的效果。

第一种方法和第二种方法有什么区别?

Answers:


10

使用第一种方法,您没有创建别名,而是在创建符号链接。符号链接是符号链接的缩写:

符号链接是充当指向其他文件的指针的文件。[...]符号链接是一种特殊类型的文件,其内容是一个字符串,该字符串是另一个文件(链接所指向的文件)的路径名。换句话说,符号链接是指向另一个名称的指针,而不是指向基础对象的指针。

在此处此处阅读有关符号链接的更多信息。

实际上,只有使用第二种方法,您才能创建别名。

别名允许将字符串替换为简单命令的第一个单词时使用该单词。Shell维护了一个别名列表,可以使用alias和unalias内置命令来设置和取消设置别名(请参见下面的SHELL BUILTIN COMMANDS)。如果没有引号,则检查每个简单命令的第一个单词,以查看其是否具有别名。如果是这样,该词将被别名文本替换。

您可以在可以键入命令并让外壳程序(在本例中为bash)解释的任何位置定义别名,但是,为了使别名在其他外壳程序中可用,需要在由外壳程序解释的文件中定义该别名。在启动时(shell启动,而不是计算机启动)。

对于bash来说,它们是/etc/bash.bashrc(系统范围)和~/.bashrc。当shell以交互模式启动时(例如使用时Terminal),将解释这些文件。我不会提及配置文件,因为它们有不同的用途。

因此,您想添加别名以~/.bashrc使它们在每个交互式Shell中都可用。

.bash_aliases方法可以完成与放入别名完全相同的操作,~/.bashrc但是具有易于被程序解析和操纵的附加好处。

. ~/.bash_aliases手段源(负载)_~/.bash_aliases_在当前运行的外壳的情况下。


@lilo你打败了我!+1
myusuf3

@gc我要打麻袋,所以要疯了:)
Li Lo

@lilo haha​​hha :)
myusuf3 2010年

1
您可能会认为它的工作原理相同,但事实并非如此。请阅读我在回答中提到的符号链接上的材料。符号链接和别名具有不同的用途,并且在创建时会考虑不同的用途。为了给您一个示例,为什么符号链接不能像别名一样工作,请尝试以下方法-定义一个别名,例如:alias px =“ ps axu”。现在尝试使用符号链接来完成相同的操作。
李罗2010年

1
@Li Lo:我已经了解了synlink和/ usr / local / bin之间的区别,但是我的问题(可能与一般问题有些脱节)是:/ usr / local / bin的用途是什么?
Strae
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.