検索機能のエイリアスを指定し、それをsudoで使用します。

検索機能のエイリアスを指定し、それをsudoで使用します。

find「自動モード」(すべてのメッセージなし)で実行できるエイリアスの作成に問題がありますPermission denied。私のbash技術が非常に悪く、この問題を解決する方法がわかりません。

これは私のエイリアスです~/.bashrc

alias find='function _find(){find / -name "$1" 2>&1 | grep -v "Permission denied"}'

source ~/.bashrcしたがって、実行するとsudo find "Exercism"出力が表示されます。find: ‘Exercism’: No such file or directory

ただし、実行するとfind / -name "Exercism" 2>&1 | grep -v "Permission denied"正しい結果が生成されます。

findパラメータをエイリアス関数に正しく渡すのか、まったく渡すのかわかりません。

答え1

エイリアスは、解釈される前にシェルコード内の単語を別のテキストに置き換えると考えてください。

エイリアスは次findのように定義されます。

alias find='function _find(){find / -name "$1" 2>&1 | grep -v "Permission denied"}'

入力したとおり

find

プロンプトで次に置き換えられます。

function _find(){find / -name "$1" 2>&1 | grep -v "Permission denied"}

シェルがある場合、zshこのコードは本文が_findイン関数を定義しますfind / -name "$1" 2>&1 | grep -v "Permission denied"。を含む他のシェルでは、変数宣言の正しい構文ではないか(またはなど)、これは単純なコマンドとして扱われ、単純なコマンドをサポートしていない唯一のシェルであるため、構文エラーがbash発生します。関数本体としてのコマンド。function f()bashyash{find...bashyash

ここでは、別名ではなく関数を定義しようとしていますが、関数はコマンドとは異なるfindAPIを持っているので、私と同じ名前で呼び出す必要があります。

myfind() {
  find / -name "$@" 2>&1 | grep -v "Permission denied"
}

とにかくエイリアスまたは関数は両方ともシェルの内部関数なので、から呼び出すことはできませんsudosudo呼び出すには、スクリプトなどの実際のコマンドを作成する必要があります。

#! /bin/sh -
find / -name "$@" 2>&1 | grep -v "Permission denied"

スクリプトを実行可能にし、sudossecure_pathが定義されたディレクトリに保存する必要があります。

答え2

alias find='function _find() { find / -name "$1" 2>&1 | grep -v ": Permission denied$"; } ; _find'

あなたのエイリアスは関数を定義します。関数を定義したい呼ぶ

関連情報