I have a bash script I am making that generates some numbers assignes them to variables then uses osascript to write them out in any application of choice.
Here is a simplified version of what I want to do.
monday1=5
osascript -e 'tell application "System Events" to keystroke "$monday1"'; \
The osascript should look like this
osascript -e 'tell application "System Events" to keystroke "5"'; \
This will then type out the number 5 in what ever app I have my cursor in. The problem is it outputs $monday1 instead. I know I have to do something to escape the quotes so the script can input the variable, but I'm not sure how.
Thoughts?
The problem is that inside single quotes, there are no special metacharacters, so
$monday1is passed toosascriptunchanged. So, you have to make sure that$monday1is not inside single quotes.Your options include:
The first stops the single-quoting just after the double quote to surround the key stroke, embeds the value of
$monday, and resumes the single-quoting for the remaining double quote. This works because there are no spaces etc in$monday1.The second is similar to the first but surrounds
"$monday1"in double quotes, so it will work even if$monday1contained spaces.The third surrounds the whole argument with double quotes, and escapes each embedded double quote. If you're not allergic to backslashes, this is good.
The fourth may or may not work — it depends on whether the
osascriptprogram is sensitive to the type of the quotes surrounding its arguments. It simply reverses the use of double quotes and single quotes. (This works as far as the shell is concerned. Gordon Davisson observes in a comment thatosascriptrequires double quotes and does not accept single quotes, so it doesn't work because of the rules of the invoked program —osascript.)In both the third and fourth cases, you need to be careful if there are other parts of the string that need to be protected so that the shell does not expand the information. In general, single quotes are better, so I'd use one of the first two options.