如何获取Applescript输入以运行终端命令

时间:2013-08-28 06:28:44

标签: macos applescript

我经常在学校计算机之间切换,并且优先显示隐藏文件,但不是每个人都这样做。通常我会使用

"defaults write com.apple.finder AppleShowAllFiles -bool true"

但是,

命令,如果我可以运行一些Applescript,而不是手动将文本复制到终端,然后在我完成后重做这个,这将非常方便。所以我想要完成的是接收用户输入是否要显示所有文件,然后运行该命令。对Applescript做一些初步的研究我能够弄清楚如何构建它的一些基本概念。以下代码是错误的,所以请原谅noob错误。

(choose from list {"Hide", "Show"} ¬
    with prompt "Do you want to hide or show hidden files?")
if "Hide" then
    do shell script "defaults write com.apple.finder AppleShowAllFiles -bool False"
else 
    do shell script "defaults write com.apple.finder AppleShowAllFiles -bool True"
end 

我可以进入用户对话框,但是,当我尝试输入一个选项时,它会回复:“无法将”隐藏“设置为类型布尔值。”如果有人可以帮助我向我展示我需要改变的东西,那将非常感激。

谢谢,迈克尔。

2 个答案:

答案 0 :(得分:3)

choose from list会返回所选项目的列表。

choose from list {"Hide", "Show"} with prompt "Do you want to hide or show hidden files?"
if result is {"Show"} then
    do shell script "defaults write com.apple.finder AppleShowAllFiles -bool true"
else
    do shell script "defaults write com.apple.finder AppleShowAllFiles -bool false"
end if
quit application "Finder"

我使用这样的脚本切换显示隐藏文件:

do shell script "x=$(defaults read com.apple.finder AppleShowAllFiles)
[ $x = 1 ] && b=false || b=true
defaults write com.apple.finder AppleShowAllFiles -bool $b"
tell application "Finder"
    quit
    delay 0.1 -- without this delay Finder was not made frontmost
    launch -- open Finder in the background
    delay 0.1 -- without this delay there was sometimes a "connection is invalid" error
    activate -- make Finder frontmost
    reopen -- open a new default window
end tell

答案 1 :(得分:0)

从列表中选择返回一个列表(如果用户取消,则返回False)。这样做是为了将列表强制转换为字符串:

(choose from list {"Hide", "Show"} ¬
    with prompt "Do you want to hide or show hidden files?") as string

请确保保留括号,否则as string将强制提示您的提示字符串,您仍会收到一个列表。