在运行别名命令之前先回显该命令

在运行别名命令之前先回显该命令

我有几个别名想澄清一下。它们正在工作。我怎样才能使它成为许多其他别名的选项。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 系统上实现起来都不困难:

  1. 在您的主文件夹或任何其他适合您的文件夹中创建一个专用文件。让它成为~/.aliases

  2. 该文件的内容应类似如下内容:

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

  1. 创建文件并添加所有需要的别名后,您需要做的就是将以下内容添加到文件中~/.bashrc
ALIAS_FILE=$HOME/.aliases
if [ -f "$ALIAS_FILE" ]; then
    source "$ALIAS_FILE"
fi

~/.bashrc每次打开终端时都会调用此文件。因此,这些别名将在您的控制台中可用,而无需您进行任何其他操作!漂亮又整洁!

  1. 最后一步。让我们打开控制台并测试我们的解决方案:
用户@用户电脑:~/工作/项目/你的项目$ gl

git 日志

提交 543c1d070c0b52a510def7ec8a451472c513019c (HEAD -> feature/FEATURE-999-branch)
作者: John Doe
日期:2023 年 1 月 24 日星期二 18:01:14 +0100

相关内容