コマンドは通常どおり実行されますが、実行前にパラメーターに対する追加操作も実行できるように、コマンドにエイリアスを割り当てたい場合があります。たとえば、次のようになります。
alias ls="echo displaying contents of $@; ls $@"
単に仮説にすぎませんが、基本的にコマンド(この場合はls)を実行し、基準がls
発生する前にそれを実行する静的コマンドセットを設定したいと思います。
次の関数:
function ls() {
echo "printing $1"
ls $1
}
問題のコマンドで使用されているスイッチ/オプションを処理する必要があるため、不適切に見えます。つまり、コマンド全体を再生成する必要があります。
PS。元のコマンドを一般的な方法で使用し、エイリアスまたはrc(つまり、永続的に接続できるもの)を使用して上記の方法で機能を追加したいと思います。
答え1
"$@"
以下を使用して、すべての関数パラメータをそのまま実際のコマンドに渡すことができます。
$ verbose_ls() { echo "running ls with args '$@'"; \ls "$@"; }
$ alias ls=verbose_ls
$ ls -l -a /
running ls with args '-l -a /'
...
関数\
の前のバックスラッシュを参照してください。これにより、再帰的に定義されたエイリアスの代わりに呼び出そうとするため、エイリアスの拡張をls
防ぐことができます。bash
ls
/bin/ls
任意のオプションスイッチを実際のコマンドに渡す機能を維持しながら、実際に関数内の特定のパラメータにアクセスしたい場合、関数自体にある種のパラメータ解析ロジックを実装することは避けられません。
答え2
エイリアスを使用すると、これを行うことはできません。http://mywiki.wooledge.org/BashFAQ/080
答え3
あなたはそれを使用することができます:
ls() {
echo "printing ${1}"
command ls "${1}"
}