Linux Mint下调整脚本逻辑:实现A或(B执行后再执行C)
脚本逻辑调整与问题解决
需求说明
当前脚本逻辑为A or B then C,需修改为A or (B then C),即仅在执行B分支(A执行失败时)时才运行C操作,执行A分支时不触发C。其中:
- A:
wmctrl -a 'To Do List - Google Sheets'(激活已有表格窗口) - B:
google-chrome --new-window https://docs.google.com/spreadsheets/d/1Oh7XWRTWoy5izkz4eV6G7vRKgdwNeZa_NW-VCdR5GUk/edit#gid=0(打开新表格窗口) - C:
xdotool key F11(切换Chrome全屏,因--start-fullscreen在Linux Mint 20.3无效)
错误尝试的命令
命令1:
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)]]
问题:sh -c后未用引号包裹命令字符串,且[[ ]]是Bash专属语法,sh环境不兼容。
命令2:
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)"
问题:引号嵌套错误,外层双引号内的未转义双引号导致语法解析失败。
正确解决方案
要实现**A || (B && C)**的逻辑优先级,需正确处理命令字符串的引号与语法:
方案1(兼容sh环境):
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)'
方案2(指定Bash执行,更稳定):
bash -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)'
关键说明
- 用单引号包裹
-c后的整个命令内容,避免内部双引号被Shell提前解析 - 括号
(...)明确将B和C绑定为一个逻辑单元,确保只有A执行失败时,才会依次运行B和C - 此写法保证
xdotool key F11仅在打开新Chrome窗口的分支触发,后续运行脚本时,只要A成功激活已有窗口,就不会执行全屏切换操作
内容的提问来源于stack exchange,提问作者Ristelan
相关产品推荐
相关产品推荐

