OSX: 스크립트 내에서 기본적으로 GNU Find를 찾는 방법은 무엇입니까?

OSX: 스크립트 내에서 기본적으로 GNU Find를 찾는 방법은 무엇입니까?

그래서 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)

관련 정보