如何创建永久的 Bash 别名?

Bak*_*yor 471 bash alias

我想为rm命令创建一个别名,以便在执行此命令后收到确认消息。所以我正在创建一个这样的别名alias rm='rm -i'。但据我所知,这是一个临时别名,它会一直存在,直到您关闭终端。

正如这里解释的永久保存别名,我需要在终端中执行~/.bash_aliases~/.bashrc命令并在那里添加我的别名。但是当我执行时,~/.bashrc我收到以下错误消息:

bash: /home/bakhtiyor/.bashrc: Permission denied
Run Code Online (Sandbox Code Playgroud)

当我运行时,~/.bash_aliases我收到另一条错误消息,如下所示:

bash: /home/bakhtiyor/.bash_aliases: File or directory doesn't exist.
Run Code Online (Sandbox Code Playgroud)

实际问题是什么,我该如何解决?

kar*_*k87 525

要创建别名,请将该别名永久添加到您的.bashrc文件中

gedit ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

然后在底部添加您的别名。

替代文字

现在. ~/.bashrc在您的终端中执行(在.和之间应该有一个空格~/.bashrc

现在您可以检查您的别名。

替代文字

  • @Geek @Zen“执行”不是正确的术语。点相当于`source`。与`。~/.bashrc`,你来获取你的 bash。执行该文件将启动一个子进程,执行该进程中的命令,然后返回。在子进程中完成的所有操作对父进程(您执行的 bash)没有影响。相反,采购(带点)的行为与您在终端中写入文件的内容完全一样。这就是你想要的。每次启动 bash 时都会获取`.bashrc`。如果您进行更改,则在您手动启动新的 bash 或源代码之前,它们将不会应用。 (33认同)
  • @karthick87 你写了“现在在你的终端中执行 .~/.bashrc(在 . 和 ~/.bashrc 之间应该有一个间隙。”。为什么需要这一步? (6认同)
  • 第一个 '.' 是什么意思 做在。~/.bashrc ? (5认同)

ane*_*hep 302

有很多方法可以创建别名。最常用的方法是:

  1. 直接在~/.bashrc文件中添加别名

    例如:将这些行附加到~/.bashrc文件

    alias ll='ls -l'
    alias rm='rm -i'
    
    Run Code Online (Sandbox Code Playgroud)

    接下来的时间(你已经登录后输出/输入,或做. ~/.bashrc)当你键入rmrm -i命令将被执行。

  2. 第二种方法允许您制作一个单独的别名文件,因此您不必将它们放入 中.bashrc,而是放入您选择的文件中。首先,编辑您的~/.bashrc文件并添加以下行(如果它们尚不存在),或者如果存在则取消注释它们:

    if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
    fi
    
    Run Code Online (Sandbox Code Playgroud)

    保存并关闭文件。之后,您所要做的就是创建一个~/.bash_aliases文件并在其中添加别名,格式与第一种方法中指定的格式相同。

    我的~/.bash_aliases文件内容:

    alias cs='cd;ls'
    
    Run Code Online (Sandbox Code Playgroud)

  • +1 用于使用`~/.bash_aliases`。 (90认同)
  • 默认情况下,`~/.bashrc` 包含对 `~/.bash_aliases` 的包含,无需编辑。 (7认同)

Mar*_*ied 21

在我看来,您唯一的问题就是在 .bashrc 不可执行时尝试执行它。但这不是正确的做法;每当您对此文件进行更改时,您都应该通过以下命令“执行”它:

source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

否则,它只会创建一个新 shell,在新 shell 的环境中执行文件,然后在退出时丢弃该环境,从而丢失您的更改。通过获取脚本,它会在当前 shell 中执行,因此它将保持有效。

我假设第二个错误是因为 bash_aliases 不存在。这不是必需的,只是建议将您的更改分开和组织。它仅在存在时才使用,您可以在 .bashrc 中看到它的测试:

if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
Run Code Online (Sandbox Code Playgroud)

这表示如果文件 ~/.bash_aliases 存在,则运行它。

  • 只是为了完整性:行上的初始点`。~/.bash_aliases` 与 shell 内置命令 `source` 具有相同的含义。我发现这是正确的答案,解释了发生了什么。 (4认同)

Joã*_*nto 17

问题是您正在尝试执行非可执行文件:您可以通过以下方式检查:

ls -la ~/.bashrc
-rw-r--r-- 1 username username 3596 2010-08-05 17:17 /home/pt001424/.bashrc
Run Code Online (Sandbox Code Playgroud)

请注意,第一列(文件权限)上没有“x - 可执行”字母。

配置文件不是可执行文件,而不是执行它们加载它们:

source /home/bakhtiyor/.bashrc
Run Code Online (Sandbox Code Playgroud)

或者

. /home/bakhtiyor/.bashrc
Run Code Online (Sandbox Code Playgroud)


use*_*638 10

echo "alias vps='ssh -X user@example.com'" >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

这是我正在寻找的一个示例,一种在终端(“vps”)上键入几个字母以远程登录服务器并启用 X11 转发的方法,这样我就可以通过网络运行诸如“gedit”之类的 gui 应用程序。

无论是什么命令/别名命令,这种带有 echo 语句、引号和用于将命令的输出附加到文件 (>>) 的符号的方式对我来说都适用。只需将我的命令替换为您需要的别名命令并将其输入到您的终端中。


bli*_*f77 6

我编写了这个有用的函数来快速创建一个新别名,然后将别名定义写入~/.bash_aliases (如果存在)~/.bashrc.

提示:确保~/.bash_aliases存在并在~/.bashrc.

# -----------------------------------
#  Create a new permanent bash alias
#
#  @param $1 - name
#  @param $2 - definition
# -----------------------------------
new-alias () { 
  if [ -z "$1" ]; then
    echo "alias name:" && read NAME
  else
    NAME=$1
  fi

  if alias $NAME 2 > /dev/null > /dev/null; then
    echo "alias $NAME already exists - continue [y/n]?" && read YN
    case $YN in
      [Yy]* ) echo "okay, let's proceed.";;
      [Nn]* ) return;;
      * ) echo "invalid response." && return;;
    esac
  fi

  if [ -z "$2" ]; then
    echo "alias definition:" && read DEFINTION
  else
    DEFINTION="$2"
  fi

  if [ -f ~/.bash_aliases ]; then
    echo "alias $NAME=\"$DEFINTION\"" >> ~/.bash_aliases
  else
    echo "alias $NAME=\"$DEFINTION\"" >> ~/.bashrc
  fi

  alias $NAME="$DEFINTION"
}
Run Code Online (Sandbox Code Playgroud)


ytb*_*yan 5

如果您使用 ruby​​,则可以使用 ruby​​gem 进行安装。

gem install aka2

用法

aka generate hello="echo helloworld" #add an alias
aka g hello="echo helloworld"  #add alias for lazy people

aka destroy hello #remove alias
aka d hello #remove alias for lazy people
Run Code Online (Sandbox Code Playgroud)

rubygem 将自动获取您的 dot 文件,这样您就不需要了。一探究竟。