我有几个别名想澄清一下。它们正在工作。我怎样才能使它成为许多其他别名的选项。Awk 还是 grep?指针很有帮助。谢谢。
# IP addresses
alias myip="echo '# myip curl https://ipecho.net/plain; echo #'; curl -sS https://ipecho.net/plain; echo"
alias hazip="echo '# hazip curl https://ipv4.icanhazip.com #'; curl -sS https://ipv4.icanhazip.com"
alias ips='myip && hazip'
~ ips
# myip curl https://ipecho.net/plain; echo #
1.2.3.4
# hazip curl https://ipv4.icanhazip.com #
1.2.3.4
答案1
示例~/.bash_aliases
文件:
alias hi=" echo Hello"
您可以将此内容修改为以下内容,以解决您的问题:
alias hi=" type hi; echo Hello"
情况 1 的输出:
$ hi
Hello
情况 2 的输出:
$ hi
hi is aliased to `type hi; echo Hello'
Hello
答案2
那么像这样的事情怎么样:
shopt -s extdebug
shopt -u expand_aliases
function check_for_alias {
COMMAND=$(alias $BASH_COMMAND 2> /dev/null)
if [ $? -eq 0 ]
then
tput setaf 1
echo $COMMAND
tput sgr0
${BASH_ALIASES[$BASH_COMMAND]}
return 1
fi
}
trap check_for_alias DEBUG
解释:
我使用所谓的 bash DEBUG trap 在任何命令之前调用一个函数。在里面我可以使用$BASH_COMMAND
变量来查看当前正在调用的内容:
function check_for_alias {
echo $BASH_COMMAND
}
trap check_for_alias DEBUG
这对于别名不起作用,因为在处理程序中它们已经扩展了 - 我必须禁用它们的扩展,然后手动调用它们:
shopt -u expand_aliases
function check_for_alias {
# ...
${BASH_ALIASES[$BASH_COMMAND]}
}
不幸的是,bash 仍然尝试运行未扩展的别名,因此我收到一条错误消息,告诉我未找到该命令。为了绕过这个问题,我启用了调试,如果我检测到我运行的命令是别名,则从处理程序返回 1
shopt -s extdebug
function check_for_alias {
COMMAND=$(alias $BASH_COMMAND 2> /dev/null)
if [ $? -eq 0 ]
then
# ...
return 1
fi
}
最后,我使用红色字体来打印别名tput
。输出命令存储在$COMMAND
变量中。
tput setaf 1
echo $COMMAND
tput sgr0
答案3
首先,我需要强调的是,在执行之前没有现成的解决方案来回显别名命令。至少,我找不到类似的东西……但这并不意味着我们不能利用 bash 的灵活性来实现我们想要的任何东西!
以下解决方案由几个部分组成,但在任何 Ubuntu 系统上实现起来都不困难:
在您的主文件夹或任何其他适合您的文件夹中创建一个专用文件。让它成为
~/.aliases
该文件的内容应类似如下内容:
als() {
alias_name="$1"
cmd="$2"
alias $alias_name="echo ; echo $cmd ; echo && $cmd"
}
als gl "git log"
als glns "git log --name-status"
als sshc-router "ssh [email protected]"
为了了解它是如何工作的,让我们看一下第一个命令:
als gl "git log"
这是一个常规的 bash 函数调用,它接受两个参数:gl
别名和"git log"
别名命令。
函数的内容als()
非常简单:它只是为每个传递的命令构建回显输出。对于上面的命令,最终的别名将如下所示:
alias gl="echo ; echo git log ; echo && git log"
(echo
需要空 来添加更多新行,以便命令能够更好地查看。)
如您所见,添加新别名命令的方式比原始命令结构更为简单alias name=command
。
- 创建文件并添加所有需要的别名后,您需要做的就是将以下内容添加到文件中
~/.bashrc
:
ALIAS_FILE=$HOME/.aliases
if [ -f "$ALIAS_FILE" ]; then
source "$ALIAS_FILE"
fi
~/.bashrc
每次打开终端时都会调用此文件。因此,这些别名将在您的控制台中可用,而无需您进行任何其他操作!漂亮又整洁!
- 最后一步。让我们打开控制台并测试我们的解决方案:
用户@用户电脑:~/工作/项目/你的项目$ gl git 日志 提交 543c1d070c0b52a510def7ec8a451472c513019c (HEAD -> feature/FEATURE-999-branch) 作者: John Doe 日期:2023 年 1 月 24 日星期二 18:01:14 +0100