Bashでosascript
を使用して、Appleスクリプトを介して通知センター(Mac OS X)にメッセージを表示しています。Bashからスクリプトにテキスト変数を渡そうとしています。スペースのない変数の場合、これは問題なく機能しますが、スペースのある変数では機能しません。
定義
var1="Hello"
var2="Hello World"
と使用
osascript -e 'display notification "'$var1'"'
動作しますが、
osascript -e 'display notification "'$var2'"'
収量
syntax error: Expected string but found end of script.
何を変更する必要がありますか(私はこれに不慣れです)?ありがとう!
代わりに使用してみてください:
osascript -e "display notification \"$var2\""
または:
osascript -e 'display notification "'"$var2"'"'
これにより、bashにスペースを含む変数の操作の問題が修正されます。ただし、このソリューションは、osascriptコードの挿入を防ぎません。したがって、 Charles Duffyのソリューション のいずれかを選択するか、bash
パラメーター展開を使用することをお勧めします:
# 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//\"/}"'"'
この非常に有用な提案をしてくれたmklement0に感謝します!
このバージョンは、文字列の連結を使用しようとするバリアントとは異なり、インジェクション攻撃に対して完全に安全です。
osascript \
-e "on run(argv)" \
-e "return display notification item 1 of argv" \
-e "end" \
-- "$var2"
...または、argvではなくstdinでコードを渡すことを好む場合:
osascript -- - "$var2" <<'EOF'
on run(argv)
return display notification item 1 of argv
end
EOF