Based on Multiple logical operators, ((A || B) && C), and "syntax error near unexpected token" I tried this...
sh -c [["wmctrl -a 'To Do List - Google Sheets' || (google-chrome --new-window https://docs.google.com/spreadsheets/d/1Oh7XWRTWoy5izkz4eV6G7vZKgdwNeZa_NW-VCdR5GUk/edit#gid=0 && xdotool key F11")]]
but it didn't work.
The URL below is associated with "To Do List - Google Sheets"
sh -c "wmctrl -a 'To Do List - Google Sheets' || "(google-chrome --new-window https://docs.google.com/spreadsheets/d/1Oh7XWRTWoy5izkz4eV6G7vRKgdwNeZa_NW-VCdR5GUk/edit#gid=0 && xdotool key F11)"
Because google-chrome --start-fullscreen
does not work on my machine which is running Linux Mint 20.3, I appended xdotool key F11
to cause Google Chrome to open full screen.
That works properly the first time I run the script, but subsequently xdotool key F11
toggles full screen. I understand what is happening, but I don't know how to cause xdotool key F11
to only run in case part B were to run (assuming my script were considered to be A || B) but not part A were to run.
In other words, currently my script's logic is A or B then C, but I want my script's logic to be A or (B then C).
CodePudding user response:
I'd suggest you save yourself some grief by writing it legibly
export url=https://...
sh -c '
if ! wmctrl -a "To Do List - Google Sheets"; then
google-chrome --new-window "$url" && xdotool key F11
fi
'
For a one-liner, just remove the newlines and add a semicolon before "fi"
sh -c 'if ! wmctrl -a "To Do List - Google Sheets"; then google-chrome --new-window '"$url"' && xdotool key F11; fi'
Or, using the boolean control operators, and braces to group the right-hand side of ||
(note the semicolon before the close brace is required)
sh -c 'wmctrl -a "To Do List - Google Sheets" || { google-chrome --new-window '"$url"' && xdotool key F11; }'
CodePudding user response:
'[[' ']]' is for bash, not sh. So,
sh -c "[["
would not work anywayYou need a space after '[[' and before ']]'
'[[' ']]' are logic operator. Not something to start commands in it. So, I don't think you should be using them at all any way.
[[ "firefox" ]]
doesn't start firefox at all, and has nothing to do with firefox command. It is just true (meaning that[[
built in returns a 0 exit code) because "firefox" string is not empty. As would be[[ "wqyupfwirarav" ]]
or anything. ```
So, from what you said, I surmise that what you are looking for is
wmctrl -a 'To Do List - Google Sheets' || ( google-chrome --new-window "https://docs.google.com/spreadsheets/d/1Oh7XWRTWoy5izkz4eV6G7vZKgdwNeZa_NW-VCdR5GUk/edit#gid=0" && xdotool key F11" )
Or, even better, since there is no need for subshell (( ... )
starts a new shell in which it executes ... ; so ( bla || foo )
is a little bit like bash -c "bla || foo"
)
wmctrl -a 'To Do List - Google Sheets' || { google-chrome --new-window "https://docs.google.com/spreadsheets/d/1Oh7XWRTWoy5izkz4eV6G7vZKgdwNeZa_NW-VCdR5GUk/edit#gid=0" && xdotool key F11 ; }
Note the compulsory ;
at the end of the compound grouping ({ ... }
).
This doesn't start a subshell. It just executes wmctrl ...
command and, if it fails, executes google-chrome
command and then the xdotool command.
Note that I also enclosed the google-chrome url in double quote. At first glance it is not necessary here (not even sure tho), but generally speaking url could contain some &
or things like that, that could require quoting in order not to be interpreted by bash.