使用 bash 从脚本打开终端窗口后运行命令

使用 bash 从脚本打开终端窗口后运行命令

我有一个非常简单的脚本,用于在项目根文件夹中从 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

相关内容