既存のコマンドのラッパーであり、すべての元のフラグを受け入れる新しいコマンドを定義する方法は?

既存のコマンドのラッパーであり、すべての元のフラグを受け入れる新しいコマンドを定義する方法は?

私が望むのは、コマンドが成功した場合に関連情報を印刷するコマンドを作成することです。たとえば、別名を次のように定義すると、

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

その後、実行するとcd端末が印刷されますchanging directory to /path/to/destination/。ただし、このソリューションでは、commandで定義されているフラグを使用することはできませんcd。上記と同様に動作しますが、基本コマンドに対してもともと定義されたすべてのフラグを受け入れるコマンドを定義したいと思います。 、mkdirおよびについてこれを行う予定です。cprm

答え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)に次のコマンドを追加した後、シェルを再起動できます。

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

関連情報