그래서 homebrew를 통해 GNU find를 설치했습니다. 그런 다음 "find"라는 별칭을 만들고 이를 GNU find로 지정했습니다.
~
➜ alias | grep find
find=/usr/local/bin/gfind
tree='find . -print | sed -e '\''s;[^/]*/;|____;g;s;____|; |;g'\'
~
➜ which find
find: aliased to /usr/local/bin/gfind
~
➜ find --version
find (GNU findutils) 4.7.0
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2)
내 문제는 스크립트(bash 및 ZSH 시도) 내에서 "find" 명령을 사용할 때 스크립트가 항상 Apple에서 제공한 find 명령을 사용하려고 한다는 것입니다.
문제를 해결하는 방법에 대한 아이디어가 있습니까? 감사해요.
이것은 내 샘플 스크립트입니다.
#!/bin/bash
source ~/Documents/environment-setup.sh
alias | grep find
which find
echo "running find --version"
find --version
echo "running gfind --version"
gfind --version
이것은 스크립트의 출력입니다.
~
➜ ./test.sh
alias find='/usr/local/bin/gfind'
/usr/bin/find
running find --version
find: illegal option -- -
usage: find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]
running gfind --version
find (GNU findutils) 4.7.0
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2)
답변1
ZSH와 BASH는 서로 다른 쉘이므로 차이점이 많을 수 있으니 주의하세요. 귀하의 예에는 두 가지 문제가 있습니다.
질문 1: 어느 것입니까?
어느Bash에는 내장 명령이 없지만 zsh에는 있습니다. 왜냐하면어느내장 명령이 아니며 별칭을 확인할 수 있습니다.
당신은 사용해야합니다유형
유형두 가지 모두에 내장된 명령입니다.
존재하다세게 때리다
MyMAC:tmp e444$ bash -l
MyMAC:tmp e444$ type which
which is /usr/bin/which
MyMAC:tmp e444$ type type
type is a shell builtin
존재하다ZTE
MyMAC:tmp emas$ zsh -l
MyMAC% type which
which is a shell builtin
MyMAC% type type
type is a shell builtin
질문 2: 별칭
BASH에서는 기본적으로 비대화형 쉘(스크립트)에서 별칭이 확장되지 않습니다.
~에서man bash
쉘이 비대화형일 때 별칭은 다음을 제외하면 확장되지 않습니다.
ZSH에서는 별칭이 확장됩니다.
Bash의 작은 예b.sh및 ZSHz.sh
파일 b.sh
#!/bin/bash
mysql -v
alias mysql='/usr/local/Cellar/mysql55/5.5.30/bin/mysql'
mysql -v
MyMAC:tmp e444$ ./b.sh
./b.sh: line 2: mysql: command not found
./b.sh: line 4: mysql: command not found
파일 z.sh
#!/bin/zsh
mysql -v
alias mysql='/usr/local/Cellar/mysql55/5.5.30/bin/mysql'
mysql -v
MyMAC:tmp e444$ ./z.sh
./z.sh:2: command not found: mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)