web-dev-qa-db-ja.com

関数で上書きした後に元のシステムコマンドを取得する方法は?

私は今ハッカソンにいるので、誰かがすぐにこれに答えるなら、あなたは私に大きな恩恵をしてくれるでしょう。

.bashrcに次のようなls()という関数を作成しました。

ls() {

  if(some condition);
    do something
  else
    ls; #(CALL TO ORIGINAL ls SYSTEM CALL)
  fi

}

しかし、ここでelse部分に進むと、無限ループに入ります

他の場所で元のlsシステムコールを呼び出す方法.

3

commandを探しています:

コマンド[-pVv]コマンド[arg ...]

通常のシェル関数検索を抑制する引数を指定してコマンドを実行します。組み込みコマンドまたはPATHにあるコマンドのみが実行されます。 -pオプションが指定されている場合、コマンドの検索は、すべての標準ユーティリティを見つけることが保証されているPATHのデフォルト値を使用して実行されます。 -Vまたは-vオプションのいずれかを指定すると、コマンドの説明が出力されます。 -vオプションを使用すると、コマンドの呼び出しに使用されたコマンドまたはファイル名を示す単一のWordが表示されます。 -Vオプションは、より詳細な説明を生成します。 -Vまたは-vオプションが指定されている場合、終了ステータスは、コマンドが見つかった場合は0、見つからない場合は1です。どちらのオプションも指定されず、エラーが発生したか、コマンドが見つからない場合、終了ステータスは127です。それ以外の場合、組み込みコマンドの終了ステータスはcommandの終了ステータスです。

例:

$ pwd() {
> echo 'command test'
> command pwd
> }
$ pwd
command test
/etc

また、より制限的なbuiltinもあります。

builtin Shell-builtin [引数]

指定されたシェルビルトインを実行し、引数を渡して、終了ステータスを返します。これは、Shellビルトインと同じ名前の関数を定義し、そのビルトインの機能を関数内に保持する場合に役立ちます。 cdビルトインは通常、この方法で再定義されます。 Shell-builtinがShell builtinコマンドでない場合、戻りステータスはfalseです。

7
Nykakin

whichにも興味があるかもしれません。これは、あなたの$PATHその名前。

$ which ping
/bin/ping

(あなたの問題を解決するので、Nykakinの答えをお勧めしますが、これは興味がある人のための単なる別のツールです)

1
jackweirdy