Find

為 find 函式取別名並將其與 sudo 一起使用

  • October 9, 2019

我在創建別名時遇到問題,因此我可以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函式。

將別名視為在解釋之前用 shell 程式碼中的其他文本替換一個詞。

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"}

如果 shell 是zsh,那麼該程式碼將定義一個_find函式,其主體是find / -name "$1" 2>&1 | grep -v "Permission denied"。在包括bash_ function f()_ bash_ yash_ {find..._ bash_yash作為函式體。

在這裡,您要定義一個函式,而不是別名,並且由於該函式將具有與find命令不同的 API,因此您希望將其稱為我的另一個名稱,例如:

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

在任何情況下,無論是別名還是函式,因為兩者都是外殼的內部功能,您將無法從sudo. 為了sudo能夠呼叫它,你必須讓它像一個腳本一樣成為一個真正的命令:

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

您需要使該腳本可執行並將其儲存在sudo’ssecure_path如果已定義的目錄中。

引用自:https://unix.stackexchange.com/questions/545929