我有一个非常简单的脚本,用于在项目根文件夹中从 Xcode 打开终端:
#!/bin/bash
open -a Terminal "`pwd`"
我想扩展它来运行pod install
命令,所以我添加了 && 来运行它。
#!/bin/bash
open -a Terminal "`pwd`" && pod install
它不会运行第二个命令。我尝试使用单个 &,将 pod install 放入另一个脚本并调用,但无法执行。我该怎么做?我在想,因为 Xcode 运行脚本来打开终端,所以终端不知道 pod install,所以也许有一种方法可以将输入参数传递给需要运行的终端。
答案1
(我还没有尝试过,只是从手册页中了解到的)
我估计问题是启动器先运行终端命令,然后运行 pod 命令,而不是随后运行 pod 命令。我认为您想要做的是在终端中运行 pod 命令。
尝试
#!/bin/bash
open -a Terminal "`pwd`" -e "pod install"
答案2
首先,反引号没有意义。它们的作用是将工作目录作为命令。
然后,&& 是语句分隔符。你基本上执行了一个
open -a Terminal "`pwd`"
pod install
唯一的区别是pod
,在您的情况下,仅执行 ifopen
返回退出代码零。这意味着该pod
命令未在终端内执行。
现在我假设你想pod install
在新的终端窗口中运行。你可以将open -a Terminal
路径传递给一个可执行文件,因此
open -a Terminal "pod install"
不会起作用,因为没有名为 的可执行文件pod install
。相反,你应该在某处(比如在你的 中~/bin
)创建一个执行此任务的脚本。即
您有一个可执行脚本~/pod_inst
,其中包含
#!/bin/zsh
pod install
并运行它
open -a Terminal ~/bin/pod_inst
如果脚本需要动态参数,事情会变得更加棘手。假设您想在执行调用的工作目录中运行脚本open
(默认情况下,新终端将在您的主目录中运行它)。不幸的是,通过环境传递此信息不起作用(因为open
就像您单击了桌面上的终端应用程序一样,这意味着您获得了一个全新的环境)。
为了传递变量,您可以让 pod_inst 接受您已同意的名称的配置文件。脚本现在变为:
#!/bin/zsh
conf_file=~/.pod_inst
[[ -f $conf_file ]] && source $conf_file
if [[ -n $wd ]] && cd $wd
pod install
为了pod install
在当前工作目录中执行,你现在执行
echo wd="$PWD" >~/.pod_inst # Create the configuration ...
open -a Terminal ~/bin/pod_inst # Run the script in new terminal