find
macOSでコマンドエイリアスを使用して-exec
操作を実行しようとしています.bash_profile
。このfind
コマンドは以下を表示します。
find: [alias cmd]: No such file or directory
私が使うとき
find ./ -iname *.doc -exec sha256 {} \;`
どこalias sha256="shasum -a 256"
。
エイリアスなしでコマンドを実行すると正常に動作します。
定義されたコマンド別名にアクセスすることは不可能でなければなりませんかfind
、それともこれがバグですかfind
?
ベストアンサー1
オプションには純粋な実行可能ファイルが-exec
必要です。-esはシェル機能なので、シェルに存在する場合にのみ存在します。find
alias
-exec
runを実行して、シェルからすべてのコマンドを実行できますbash -c command
。ただし、エイリアスを許可するには、シェルを対話的に実行する必要があります。
を実行して対話を欺くことができますが、bash -ic sha256
エイリアス定義をその中に入れたので、インタラクティブシェル.bash_profile
だけでなく「ログインシェル」にもだまされなければなりません。ファイルはいわゆる「ログイン」を介してのみ読み取ることができるからです。シェル" 。つまり、を実行する必要がありますbash -lic sha256
。しかし、これは遅くなり、セッションログが汚染されます。
したがって、エイリアス.bashrc
はbash -i
。bash -li
これにより、コマンド全体が次のようになります。
find ./ -iname *.doc -exec bash -ic 'sha256 "$1"' -- {} \;
エイリアス定義を維持する必要がある場合、.bash_profile
コマンドは次のようになります。
find ./ -iname *.doc -exec bash -lic 'sha256 "$1"' -- {} \;