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は異なるシェルなので、違いが多い場合がありますのでご注意ください。あなたの例には2つの問題があります。

質問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)

おすすめ記事