Find
為 find 函式取別名並將其與 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
函式。
將別名視為在解釋之前用 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
如果已定義的目錄中。