명령줄을 사용하여 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
지만 그것도 도움이 되지 않는 것 같습니다.
.bash_profile 함수 에서 경로/파일을 grep
파이프하는 방법을 아는 사람이 있습니까?xargs
답변1
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
함수를 label
상위 셸의 하위 프로세스로 내보낸 다음 하위 셸을 포크하고 그곳에서 함수를 처리합니다.bash
노트:
~/.bash_profile
일반적으로 비로그인 쉘에서는 획득할 수 없으므로 함수를 호출 쉘로 내보내야export -f label
합니다 .label
xargs
이
-c
옵션은bash
실행할 명령이 옵션 인수 문자열에서 읽도록 지시합니다.
답변2
반대로 해보는 건 어때요? .xargs
xargs
find /Users/brett/Development/repos/my-repo/ -name "*.php" |
while IFS= read -r file; do grep -Iil 'mysql_query(' "$file" && label 2 "$file"
이 명령은 파일을 찾고 .php
, 각 파일을 로 저장하고 $file
, 실행하며 grep
, grep
일치하는 항목이 있으면 해당 파일을 함수에 전달합니다. Mac이 없기 때문에 테스트할 수는 없지만 정상적으로 작동할 것입니다.
답변3
함수가 정의된 쉘 인스턴스 외부에서는 함수를 사용할 수 없습니다. 이 기능은 에 있기 때문에 .bash_profile
로그인 쉘에서만 사용할 수 있고, 사용된 쉘에서 시작된 쉘에서는 사용할 수 없습니다. 함수는 다른 프로그램에서 호출할 수 없습니다 xargs
.
함수를 시작하기 위해 셸을 호출하는 것에 기반한 솔루션이 있지만 가장 간단한 솔루션은 함수의 코드를 스크립트에 넣는 것입니다. 이렇게 하면 어디서든 호출할 수 있습니다.
독립 실행형 스크립트는 상위 셸에 영향을 미칠 수 없기 때문에 모든 함수가 독립 실행형 스크립트가 될 수는 없습니다(내보내지 않은 변수를 볼 수 없고 상위 셸에서 변수를 설정할 수 없는 등). 여기서 함수는 상위 셸 내에서 실행해야 하는 작업을 수행하지 않으므로 이를 스크립트로 만드는 것이 좋습니다.