问题描述
我试图编写一个fish函数来在长命令完成运行后显示通知。我可以使用它,但是我想知道是否有更好的方法来使插值与嵌套引号一起使用。
function record_runtime --on-event fish_postexec
set text \"$argv took $CMD_DURATION\"
set command "display notification $text"
if [ $CMD_DURATION -gt 60000 ]
osascript -e "$command"
end
end
我希望有一个像osascript -e 'display notification "$argv took $CMD_DURATION"'
这样的班轮,但找不到有效的组合。
解决方法
因此,您要做的是使用一个参数执行osascript
,该参数包含命令“ display notification”和$ argv的 value ,单词“ took”和$ CMD_DURATION的值。这意味着您希望鱼扩展这些变量。
重要的是,fish不会以单引号(''
)扩展变量,这就是您其他尝试失败的原因。变量只能用双引号或完全用引号引起来。
现在我没有要测试的macOS机器,但是如果osascript也允许单引号,则很简单:
function record_runtime --on-event fish_postexec
if [ $CMD_DURATION -gt 60000 ]
osascript -e "display notification '$argv took $CMD_DURATION'"
end
end
双引号中的单引号没有特殊含义,因此$argv
和$CMD_DURATION
被扩展。
如果osascript在这里需要双引号,则必须转义内部的双引号:
function record_runtime --on-event fish_postexec
if [ $CMD_DURATION -gt 60000 ]
osascript -e "display notification \"$argv took $CMD_DURATION\""
end
end