Applescript:运行终端命令并保存输出



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

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,但不是我的第一语言。我想我已经盯着它看太久了。

这不是一个完整的答案,因为我不太熟悉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 filenamefilename在哪里,无论你把它保存为什么。 然后在终端、./filename/path/to/filename中使用它,如果它未保存在PATH环境变量中定义的位置。

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

最新更新