我正在尝试编写一个 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 take $CMD_DURATION"' 这样的单行代码
,但找不到有效的组合。
最佳答案
所以,你要做的就是执行osascript
带有一个参数,其中包含命令“显示通知”和 $argv 的值、单词“took”以及 $CMD_DURATION 的值。这意味着您希望 fish 扩展这些变量。
重要的是,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
关于Fish shell - 嵌套引号中的插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63949266/