Bash
您可以通過管道連接到 .bash_profile 函式嗎?
我收到了一個很棒的功能,可以使用命令行在 Apple 的 finder 中突出顯示文件。它基本上是 osascript 的包裝器。
我從Mac OS X 得到它:如何從終端更改文件的顏色標籤,它看起來像這樣,
# Set Finder label color label(){ if [ $# -lt 2 ]; then echo "USAGE: label [0-7] file1 [file2] ..." echo "Sets the Finder label (color) for files" echo "Default colors:" echo " 0 No color" echo " 1 Orange" echo " 2 Red" echo " 3 Yellow" echo " 4 Blue" echo " 5 Purple" echo " 6 Green" echo " 7 Gray" else osascript - "$@" << EOF on run argv set labelIndex to (item 1 of argv as number) repeat with i from 2 to (count of argv) tell application "Finder" set theFile to POSIX file (item i of argv) as alias set label index of theFile to labelIndex end tell end repeat end run EOF fi }
我將它放入 via
vim .bash_profile
,執行source .bash_profile
並能夠使用label 2 /Users/brett/Desktop/test.txt
. 完美的。但是,如果我將所有舊的 PHP mysql_query( 語句更新到 PDO 並且我想直覺地突出顯示我需要編輯的文件怎麼辦?
我通常會跑步,
find /Users/brett/Development/repos/my-repo/ -name "*.php" -print0 | xargs -0 grep -Iil 'mysql_query(' | xargs -I '{}' -n 1 label 2 {}
但它回來了,
xargs: label: No such file or directory
我讀到我應該嘗試執行
export -f label
,但這似乎也無濟於事。有誰知道我如何將路徑/文件從管道傳輸
grep
到xargs
.bash_profile 函式?
打電話
label
給xargs
你可以嘗試這樣的事情:export -f label find /Users/brett/Development/repos/my-repo/ -name "*.php" -print0 | xargs -0 grep -Iil 'mysql_query(' | xargs -I {} -n 1 bash -c 'label 2 {}'
請注意
label 2 {}
在後一個xargs
呼叫中如何更改為bash -c 'label 2 {}'
. 由於xargs
不能直接呼叫函式,我們將函式導出到父 shell 的label
子程序,然後 fork 一個子 shell 並在那里處理函式。bash
筆記:
~/.bash_profile
通常不是由非登錄 shell 提供的,因此export -f label
需要將label
函式導出到由xargs
.- 該
-c
選項告訴bash
從選項參數字元串中讀取要執行的命令。