我正在努力创造一个" 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"
,当然,这不起作用。
我也很感激有关如何避免使用"围绕新命令的身体。
谢谢
答案 0 :(得分:0)
您无法在alias
中使用参数。你需要的是一个功能,如:
permalias() {
echo "alias ${1}=\"${2}\"" >> ~/.bashrc
}
答案 1 :(得分:0)
使其成为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
打印函数的定义,并根据需要将其保存到文件中。
答案 2 :(得分:0)
试试这个:
#!/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
中是否存在所述别名,然后将其替换或失败(如果已存在)。