为什么在.profile中设置别名无效?


11

我将其作为.profile的最后一行:

alias gl="cd /home/jrenner/glances/glances"

即使重新启动后,键入gl时也找不到命令。怎么了?我以正确的用户身份登录。


您在哪里打字gl?终点站?GUI?
托马斯·沃德

1
没人解决过原来的原因吗?题。我可以确认在中定义的别名在.profile我尝试过的任何环境下均不起作用:文本控制台登录名,图形终端或其他任何内容,即使来自同一文件的环境变量也可以工作。
丹尼尔·马勒

@DanielMahler,您有理由吗?
Maged Saeed

Answers:


4

我很确定lpanebr的想法会奏效,但这是一个更优雅的解决方案。在.bashrc 我的操作方法中执行该别名命令,或者有些人喜欢添加专用于别名的文件。调用它.alias或任何东西并添加.alias到您的.bashrc

希望我可以像@lpanelbr一样进行格式化。我想知道是否有维基?


1
至于格式,askubuntu使用markdown。请查看askubuntu.com/editing-help以获得详细信息。
2013年

1
为什么.bashrc工作却不工作.profile?另外,为什么选择命名别名文件.allias而不是命名的任何原因.alias
汤姆(Tom)

#1据我了解,.bashrc特定于bash,.profile特定于非bash命令行。#2我不明白你的意思。我毕竟可以拼写。(编辑)
杰森

7

放入.profile文件时,别名有时无法始终起作用有两个相关原因。首先是.profile(或.bash_profile)文件仅用于登录外壳程序。如果要在X下的终端窗口中启动bash,则您的终端仿真器(例如gnome-termanl)可能没有将bash作为登录shell运行。[如果需要,大多数选项都可以更改它,但是默认值(无论如何对于gnome-termal而言)都不是将其作为登录外壳程序运行。]
该外壳程序将是交互式外壳程序,因此.bashrc将运行。

但是,通常在启动X会话时,bash已作为登录shell运行。因此,如果其中包含别名命令,.profile它们将与设置环境变量(如PATH等)一起执行。打开终端窗口时,将运行bash的新实例以提示并在该终端窗口中执行命令。与环境变量不同,别名不能从bash的一个实例导出到由其启动的新实例。因此,别名不会传递给新的shell。

要查看此内容,请尝试以下实验:

export ROBERT=bob
alias james=jimmy
echo $ROBERT
alias james
bash               #start a new bash instance
echo $ROBERT
alias james
exit               #end the new bash instance and revert to the original one
echo $ROBERT
alias james

请注意,.bashrc当它作为登录shell启动时,不是由bash运行的。因此,除非您的别名.bashrc来自,否则将别名放到那里永远不会起作用.profile,这是一种非常普遍的做法。


验证:将source .bashrc.bash_profile允许的.bashrc工作的别名集。
Treefish Zhang

看起来这应该是正确的答案。另外,在Ubuntu中,只需在中添加别名即可~/.bash_aliases。这是正确的方法。(有关详细信息,请阅读.bashrc文件)。
Emilio M.

0

如果您将bash(echo $SHELL)用作shell解释器,则我认为定义自己的CD函数是最好的(也许是唯一的方法)。

编辑.bashrc文件,并在末尾添加以下内容:

# my custom functions:
function gl () {
   cd /home/jrenner/glances/glances/
}

您也可以像这样扩展它:

# my custom functions:
function cdw () {
   cd /home/jrenner/glances/glances/$1
   ls
}

并直接更改到子目录并列出其内容。


1
这可能是一个很好的建议,但不是答案,因为它不能解释为什么alias放置在.profile文件中的指令失败。
汤姆(Tom)


0

在Ubuntu中执行此操作的正确方法是将别名添加到~/.bash_aliases。如果文件不存在,请创建它。

该文件(如果存在)是从default调用的~/.bashrc,别名也将在您的终端仿真器中可用。

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.