osascript using bash variable with a space

后端 未结 2 1589
走了就别回头了
走了就别回头了 2020-11-30 07:07

I am using osascript in Bash to display a message in Notification Center (Mac OS X) via Apple Script. I am trying to pass a text variable from Bash to the scrip

相关标签:
2条回答
  • 2020-11-30 07:34

    This version is completely safe against injection attacks, unlike variants trying to use string concatenation.

    osascript \
      -e "on run(argv)" \
      -e "return display notification item 1 of argv" \
      -e "end" \
      -- "$var2"
    

    ...or, if one preferred to pass code in on stdin rather than argv:

    osascript -- - "$var2" <<'EOF'
      on run(argv)
        return display notification item 1 of argv
      end
    EOF
    
    0 讨论(0)
  • 2020-11-30 07:36

    You could try to use instead :

    osascript -e "display notification \"$var2\""
    

    Or :

    osascript -e 'display notification "'"$var2"'"'
    

    This fixes the problem of manipulation of variables that contains spaces in bash. However, this solution doesn't protect against injections of osascript code. So it would be better to choose one of Charles Duffy's solutions or to use bash parameter expansion :

    # if you prefer escape the doubles quotes
    osascript -e "display notification \"${var2//\"/\\\"}\""
    # or
    osascript -e 'display notification "'"${var2//\"/\\\"}"'"'
    
    # if you prefer to remove the doubles quotes
    osascript -e "display notification \"${var2//\"/}\""
    # or
    osascript -e 'display notification "'"${var2//\"/}"'"'
    

    Thank to mklement0 for this very useful suggestion !

    0 讨论(0)
提交回复
热议问题