我在bash,我不想輸入所有的時間很長的命令,所以我把一個別名在我的.profile使用中發現-exec別名
alias foo='...'
現在我想執行使用此別名找到-exec
find . -exec foo '{}' \;
卻發現找不到FOO:
發現:FOO:沒有這樣的文件或目錄
是否可以在find中使用別名?
我在bash,我不想輸入所有的時間很長的命令,所以我把一個別名在我的.profile使用中發現-exec別名
alias foo='...'
現在我想執行使用此別名找到-exec
find . -exec foo '{}' \;
卻發現找不到FOO:
發現:FOO:沒有這樣的文件或目錄
是否可以在find中使用別名?
不,找不到你的別名。別名不像環境變量,因爲它們不被子進程「繼承」。
您可以使用相同的命令創建一個shell腳本,設置+ x權限並將其放在您的路徑中。這將與find一起工作。
在find
命令中使用別名是不可能的(或難以/容易出錯)。 更簡單的方法,以實現所期望的結果是把別名的內容在一個shell腳本和運行的shell:
alias foo | sed "s/alias foo='//;s/'$/ \"\[email protected]\"/" > /tmp/foo
find -exec bash /tmp/foo {} \;
sed命令刪除前導alias foo='
並取代通過"[email protected]"
尾隨'
其中將包含參數傳遞給腳本。
我使用ll
普遍知道在這個例子中的別名,但你可以使用你的別名,而不是,只需更換ll
與您的別名(foo
)以下行,它應該工作:
find . -exec `alias ll | cut -d"'" -f2` {} \;
的情況下, :
find . -exec `alias foo | cut -d"'" -f2` {} \;
注意它假定你的別名是引用使用以下語法:
alias foo='your-very-long-command'
find
本身並不知道有關別名的任何信息,但是你的shell卻不知道。如果您使用bash
(我認爲4.0添加了此功能)的最新版本,則可以使用find . -exec ${BASH_ALIASES[foo]} {} \;
在該位置的命令行中插入別名的文字內容。
我遇到了同樣的事情和幾乎實施skjaidev的解決方案。
我創建了一個叫做findVim.sh具有下列內容的bash腳本:
[ [email protected]:~ ]$ cat findVim.sh #!/bin/bash
find . -iname $1 -exec vim '{}' \;
然後我加入了的.bashrc別名:
[ [email protected]:~ ]$ cat ~/.bashrc | grep fvim
alias fvim='sh ~/findVim.sh'
最後,我重裝的.bashrc與源在〜/ .bashrc。 $ fvim foo.groovy
故事太爽了很久沒有BRO閱讀:
反正長話短說我可以編輯任意腳本以稍快的文件。
您可以改用該變量。
因此,而不是:
alias foo="echo test"
使用:
foo="echo test"
然後通過命令取代或eval
執行它,例如:
find . -type f -exec sh -c "eval $foo" \;
或:
find . -type f -exec sh -c "echo `$foo`" \;
這裏是一個被發現的所有非二進制文件真實的例子:
IS_BINARY='import sys; sys.exit(not b"\x00" in open(sys.argv[1], "rb").read())'
find . -type f -exec bash -c "python -c '$IS_BINARY' {} || echo {}" \;
呼叫處理髮現的結果時,別名的另一種方法是使用類似this answer
所以下面應該工作:
alias ll="ls -al"
find . -type d | while read folder; do ll $folder; done