繁体   English   中英

创建永久别名 bash 命令

[英]Creating permanent-alias bash command

我正在尝试创建一个“permalias”bash 命令,以便能够轻松创建永久别名,而无需直接处理 ~/.bashrc 文件。

到目前为止,我能够完成这项工作的唯一方法是使用以下代码:

alias permalias="echo alias $1 >> ~/.bashrc"

它允许以这种格式输入:

permalias commandname=\"commandbody\"

但我对此并不满意,因为我想保留一种更简单的输入格式,一种更接近原始别名命令的格式。

我尝试了此代码的几种变体:

alias permalias="echo alias $1=\"$2\" >> ~/.bashrc"

使用此版本,此代码permalias c "echo test"应将此行alias permalias c="echo test"到 ~/.bashrc 文件中。

但结果是: alias c "echo test" ,当然,这不起作用。

对于如何避免将 " 放在新命令的主体周围的任何建议,我也将不胜感激。

谢谢

您不能在alias使用参数。 您需要的是一个函数,例如:

permalias() {
    echo "alias ${1}=\"${2}\"" >> ~/.bashrc
}

像 Olli 所说的那样让它成为一个函数,然后你可以使用"$*"将所有参数连接到函数中。

permalias() { 
    n=$1; 
    shift; 
    echo "alias $n=\"$*\"" >> ~/.bashrc; 
}

这应该有一样的东西工作permalias c echo foo bar ,但是如果你真正想要的别名引号,它会得到毛。 permalias c echo "foo bar"不起作用,你需要像permalias c echo "'foo bar'"来对抗额外的命令行处理级别并获取文件的内部引号。

对于任何复杂的事情,最好还是创建一个 shell 函数。 您可以使用declare -fp funcname打印函数的定义,并根据需要将其保存到文件中。

尝试这个:

#!/bin/bash
permalias()
{
  local alias_regex='[A-Za-z_0-9]*'
  if
    [[ $# = 1 && $1 =~ ($alias_regex)=(.*) ]]
  then
    printf "%s\n" "${BASH_REMATCH[1]}=\"${BASH_REMATCH[2]}\"" >> ~/.bashrc
  else
    echo "USAGE: permalias VARNAME=ALIAS_COMMAND"
    return 1
  fi
}

更好的版本会首先检查.bashrc是否存在所述别名,然后替换它,如果它已经存在则失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM