[英]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.