【问题标题】:Applescript: Running terminal commands and Saving outputApplescript:运行终端命令并保存输出
【发布时间】:2017-08-23 21:23:21
【问题描述】:

所以,我正在尝试编写一个脚本来删除无线网络及其相关的钥匙串凭据。

tell application "Terminal"

activate
string mywifi
set mywifi to "test"
set mywifi to  do script ("networksetup -listallhardwareports | grep -A 1 'Wi-Fi' | grep -v 'Hardware' | sed -e 's/'Device:\ '//g'")



do script "networksetup -removepreferredwirelessnetwork $mywifi NETWORK1"
do script "security delete-generic-password NETWORK1"

delay 2

#do script "networksetup -removepreferredwirelessnetwork $mywifi NETWORK2"
#do script "security delete-generic-password Network2"

delay2

#do script "networksetup -removepreferredwirelessnetwork $mywifi Network3"
#do script "security delete-generic-password Network3"

delay 2

#do script "networksetup -removepreferredwirelessnetwork $mywifi Network4"
#do script "security delete-generic-password Network4"

delay 2

#do script "networksetup -removepreferredwirelessnetwork $mywifi Network5"

#do script "security delete-generic-password Network5"

delay 2

结束告诉 退出

我遇到麻烦的地方是使用该命令的输出设置该变量。该命令在终端中运行,但每当我尝试编译它时,都会引发以下错误

语法错误:应为“”,但发现未知标记

它在 /device:\ ' 之间的 \ ' 之后找到这个 我一直无法弄清楚缺少什么。如果我在它们之间添加“,它只会将终端拖放到 > 我第一次涉足 applescript 但不是我的第一语言。我想我已经盯着它太久了。

【问题讨论】:

  • 这一行为什么有括号? set mywifi to do script ("...")
  • 该行应该是:set mywifi to do shell script "networksetup -listallhardwareports | grep -A 1 'Wi-Fi' | grep -v 'Hardware' | sed -e 's/'Device:\\ '//g'"
  • 为什么不直接在bash 脚本中执行全部操作,而不是调用bash 11 次,每次执行一个命令?这里根本不需要任何 AppleScript。
  • 顺便说一句,您可以使用以下命令缩短命令的组合:set mywifi to do shell script "networksetup -listallhardwareports | awk '/Wi-Fi/{getline; print $2}'"
  • () 只是为了突出显示。我为混乱道歉。我不知道 bash 能够为我做到这一点。我认为applescript会更好地与osx交互。我将更多地研究 bash。谢谢指点!我知道这是命令的杂乱无章。 :) 虽然这是我可以开始工作的第一件事 :) 我很欣赏代码中的清理工作!有没有办法给大家加分?

标签: variables terminal applescript


【解决方案1】:

这不是一个完整的答案,因为我对security 命令不太熟悉,尽管我相信您需要在前面加上sudo 命令来修改钥匙串。互联网上有很多关于security 命令的好信息。我读了很多,但我的钥匙串中没有我想删除的东西,所以我无法在这方面进行测试。

以下内容涵盖了networksetup 命令,您可能还需要在终端中使用sudo,但在AppleScript 中在do shell script 命令的末尾添加with administrator privileges,如果需要首选无线网络.

您似乎正在尝试删除所有首选无线网络,这可以直接在终端中使用以下命令完成:

networksetup -removeallpreferredwirelessnetworks $(networksetup -listallhardwareports | awk '/Wi-Fi/{getline; print $2}')

如果你想在 AppleScript 中做同样的事情,例如:

do shell script "networksetup -removeallpreferredwirelessnetworks $(networksetup -listallhardwareports | awk '/Wi-Fi/{getline; print $2}')"

如果您想在 bash 脚本中使用它,则将上面的行与 bash shebang 一起使用,例如:

#!/bin/bash
networksetup -removeallpreferredwirelessnetworks $(networksetup -listallhardwareports | awk '/Wi-Fi/{getline; print $2}')

将其保存在没有扩展名的纯文本文件中,并使其可执行,例如chmod u+x filename 其中filename 是您保存的任何内容。然后在终端中使用它,./filename/path/to/filename,如果它没有保存在 PATH 环境变量中定义的位置。

如果您只想针对特定网络执行此操作,那么您可以循环遍历列表,而不是为每个网络设置一行。如果您需要这方面的帮助,请告诉我们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    相关资源
    最近更新 更多