如何定义一个新命令,它是现有命令的包装并接受所有原始标志?

如何定义一个新命令,它是现有命令的包装并接受所有原始标志?

我想做的是创建一个命令,如果命令成功,则打印一些相关信息。例如,如果我将别名定义为

alias cd='cd /path/to/destination/  &&  echo "changing directory to echo $(pwd)"'

然后当我执行时cd,终端将打印changing directory to /path/to/destination/。但使用此解决方案,我无法使用为 command 定义的标志cd。我想定义一个行为类似于上面的命令,但也接受最初为底层命令定义的所有标志。我计划为 、 和 执行mkdircp操作rm

答案1

将其包装为脚本或函数~/.bash_profile

脚本,例如mycmd.sh

#! /bin/bash

your "$1"
commands "$1"
shift
the_original_command "$@"

功能:

mycmd() {
    your "$1"
    commands "$1"
    shift
    the_original_command "$@"
}

如果您需要使用多个参数,例如

your "$1"
commands "$2"

使用shift 2、3、4、5 等。

所以,它会是:

your "$1"
commands "$2"
shift 2
the_original_command "$@"

答案2

您可以将以下命令添加到 Bash 配置文件 ( ~/.bashrc),然后重新启动 shell。

function cd_echo() {
    cd "${@}";
    echo "Changing directory to $(pwd)";
}

alias cd="cd_echo";

测试结果:

$ cd /home
Changing directory to /home

$ cd -P /dev
Changing directory to /dev

相关内容