我正在尝试find
使用macOS 上-exec
的命令别名执行 a 操作.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
需要find
纯可执行文件,而alias
-es 是 shell 功能,这意味着它们仅当您在 shell 中时才存在。
-exec
您可以通过运行run在 shell 中运行任何命令bash -c command
。然而,要接受别名,shell 必须以交互方式运行。
您可以通过执行来欺骗交互性bash -ic sha256
,但是由于您将别名定义放入其中,.bash_profile
因此您还需要将其欺骗为“登录 shell”以及交互式 shell,因为该文件只能由所谓的“登录 shell”读取。也就是说,您应该执行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"' -- {} \;
答案2
不,您的别名源自 bash。find
需要您的PATH
环境变量中有一个可执行文件。 (如果你输入后which <cmd | alias>
什么也没得到,find 会抱怨)