我想使用
terminal-notifier
构建一个包含当前命令信息的通知,但我找不到获取当前命令的方法,如下标记为 (????)
。
alias notify=terminal-notifier -message "Done with [(????)]" -title (if test $status = 0; echo "$_ suceeded"; else; echo "$_ exited with error [$status]"; end) -sound default -ignoreDnD
我将其用作
echo 1; notify
并且消息将是 Done with [echo 1;notify]
我尝试过
$_
、status current-command
和 commandline
,但都不包含参数或管道后面的内容。 history | head -n1
在执行之前没有该命令。
为了确保捕获整个命令行(而不仅仅是命令),我想我会做更多类似的事情:
function notify
eval "$argv"
set s $status
if test $s = 0
set message Succeeded
else
set message "Exited with error [$s]"
end
echo "Done with '$argv' - $message"
end
> notify echo 1
Done with 'echo 1' - Succeeded
> notify false
Done with 'false' - Exited with error [1]
# Put multiple commands in quotes, if needed
> notify "echo 1; echo 2"
Done with 'echo 1; echo 2' - Succeeded
为了简单起见,我用基本的
terminal-notifier
替换了您的 echo
,因为我不在 Mac 上。
虽然
commandline
根据手册页/文档看起来很有希望,但它实际上只在按键绑定和/或完成功能中有用。
我猜您已经知道这一点,但如果不知道(或对于其他读者来说),请将
notify
函数放入 ~/.config/fish/functions/notify.fish
中以使其持久化(并按需延迟加载)。
status current-commandline
似乎可以解决问题。即:
function alert -d "Show an alert after a command"
set message "terminal alert"
if [ $status = 0 ]
set message "$message: OK"
else
set message "$message: ERROR ($status)"
end
hterm-notify.sh "$message" "$(status current-commandline | string replace -r ";.*" "")"
tput bel
end