You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用键盘快捷键开关WiFi?Automator脚本语法报错求助

解决Automator切换WiFi脚本的语法错误及逻辑问题

问题分析

你遇到的“)”后不能跟“{”的语法错误,核心原因是Automator默认可能使用sh而非bash执行脚本,sh对函数定义的语法要求更严格;同时原脚本存在函数依赖外部变量的逻辑缺陷,即使语法修复后功能也会失效。

修复后的脚本

#!/bin/bash

set_wifi_on_or_off() {
  local interface="en$1"
  local target_status="$2"
  local toggle_to="$3"
  
  networksetup -getairportpower "$interface" | grep ": $target_status"
  if [ $? -eq 0 ]; then
    echo "WiFi interface found: $interface"
    networksetup -setairportpower "$interface" "$toggle_to"
    return 0
  fi
  return 1
}

for n in $(seq 0 10); do
  if set_wifi_on_or_off "$n" "On" "off"; then break; fi
  if set_wifi_on_or_off "$n" "Off" "on"; then break; fi
done

关键修改点

  • 指定bash解释器:脚本开头添加#!/bin/bash,强制使用bash执行,规避sh的语法限制。
  • 函数参数化改造:将WiFi接口编号n作为参数传入函数,不再依赖外部变量,解决逻辑依赖问题。
  • 移除不安全的eval:直接用变量拼接接口名称,避免eval带来的安全风险和语法歧义。
  • 简化条件判断:用[ $? -eq 0 ]替代test $? -eq 0,写法更通用简洁。
  • 添加局部变量:用local定义函数内变量,避免污染全局环境。

Automator设置注意事项

创建服务时需确认:

  • “服务收到”选择“没有输入”,应用程序选“Finder”(或你需要触发的场景)。
  • “运行Shell脚本”动作中,将“shell”选项设置为/bin/bash,“传递输入”选“忽略输入”。

内容的提问来源于stack exchange,提问作者Yves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 10:33:17