使用仅识别命令的 util 处理 `zsh` 函数

Dan*_* Li 6 zsh

(此问题以 Maccaffeinate工具为例,但该概念适用于所有xargs接受实用程序作为参数的工具(即)。)

Mac 的caffeinate工具接受实用程序的名称:caffeinate sleep 1例如,(sleep实用程序在哪里)。有没有办法让它也接受一个zsh函数,而无需修改工具本身?例如:

function mysleep {
  sleep 2
}

caffeinate mysleep    # mysleep: No such file or directory
Run Code Online (Sandbox Code Playgroud)

编辑:这个问题确实是 Bash 的重复问题——感谢你指出我的答案。但是,对于 zshexport -f不起作用。有没有办法在 zsh 中做到这一点?(我正在删除bash标签以减少混淆。)

小智 0

执行此操作的最佳方法是将函数放入脚本文件中并按如下方式调用脚本:

caffeinate myfunction.sh
Run Code Online (Sandbox Code Playgroud)

myfunction.sh 的内容:

#!/bin/bash
sleep 2
Run Code Online (Sandbox Code Playgroud)

确保脚本文件是可执行的,否则会出现权限错误:

chmod +x myfunction.sh
Run Code Online (Sandbox Code Playgroud)