![自动在 bash 命令前后添加位](https://linux22.com/image/1605125/%E8%87%AA%E5%8A%A8%E5%9C%A8%20bash%20%E5%91%BD%E4%BB%A4%E5%89%8D%E5%90%8E%E6%B7%BB%E5%8A%A0%E4%BD%8D.png)
是否可以输入foo
并让 bash 自动将其转换为time foo && notify-send "PLAYBOOK COMPLETE"
?
我特别希望这仅适用于ansible-playbook
命令(对于那些不熟悉 Ansible 的人来说,可能会有任意数量的选项、参数等,ansible-playbook
因此简单的别名可能不会起作用),以便在长剧本完成时收到通知。
每个 bash 命令前的命令看起来很有希望,但不幸的是对我来说不能正常工作。
答案1
使用 shell 函数:
function ansible-playbook { time command ansible-playbook "$@" && notify-send "PLAYBOOK COMPLETE"; }
或者
ansible-playbook () { time command ansible-playbook "$@" && notify-send "PLAYBOOK COMPLETE"; }
后一种形式是定义函数的 POSIX 方式,但ansible-playbook
别名(如果有)可能会干扰。前一种形式不受干扰但不可移植。如果没有别名并且您正在使用 Bash,那么任何一种形式都可以工作。
或者您可以编写一个以类似方式工作的包装器脚本。如果您命名它,ansible-playbook
请确保它调用真实的 ansible-playbook
,而不是其本身。在上面的函数中,该词command
可防止在无限循环中调用函数本身。