【问题标题】:How can I use AppleScript to make Terminal.app run a shell script without evaluating the output as a script?如何使用 AppleScript 使 Terminal.app 运行 shell 脚本而不将输出评估为脚本?
【发布时间】:2015-02-10 07:45:09
【问题描述】:

我正在使用 AppleScript 来启动一个又快又脏的 shell 脚本:

tell application "Terminal"
activate
do script "$(" & quoted form of MyScriptPath & ")"
end tell

正确启动终端窗口并输入我期望的内容:

~$ $('/my script path/myscript.sh')

但是,在首先评估/调用脚本时,似乎输出到 STDOUT(通过 echo)的任何内容都被评估为好像它在 $( ) 内:

#!/bin/sh
echo "foobar"

产生:

-bash: foobar: command not found

在将脚本位置发送到终端之前,我已经进行了广泛搜索,并没有真正找到合适的方法来在 AppleScript 中转义路径中的空格(而不是使用“引用形式”),但我更喜欢那。我使用的是“do script”而不是“do shell script”,因为在终端中启动的脚本是交互式的,需要集中注意力。

通过 $( ) 调用脚本时如何回显到 STDOUT?

【问题讨论】:

  • 你想完成什么?特别是为什么要使用$(...)?这意味着将封闭命令的输出替换为正在构建的当前命令行。如果你直接在 shell 中运行$(/path/to/myscript.sh),它会产生同样的错误,因为替换发生在新命令的第一个单词上。
  • 感谢您的解释。我使用 $() 是因为我假设带引号的字符串不会导致该路径处的脚本执行。干杯

标签: shell applescript


【解决方案1】:

您不需要$(...)运行命令,只需将该命令的输出包含在另一个字符串中。你只需要

tell application "Terminal"
activate
do script "/my script path/myscript.sh"
end tell

【讨论】:

  • 噢!感谢您向我确认我的事情过于复杂:) 我的问题是我认为我需要 $() (或 ``) 将字符串评估为命令。出于某种原因,我认为需要对引用的路径进行评估才能执行脚本。
猜你喜欢
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
相关资源
最近更新 更多