如何在BASH脚本中的新终端中启动命令

时间:2011-03-25 18:58:52

标签: bash

我的bash脚本读入一些变量然后在我的家庭网络上运行airodump。我想保持窗口运行airodump并打开一些新的终端来运行其他命令进行网络发现,同时airodump屏幕打开(所以我可以看到结果)。
现在我看起来像这样(为简洁而编辑):

#!/bin/bash
read -p "Enter the channel: $channel"
airomon-ng start wlan0 $channel,$channel
airodump-ng -c $channel,$channel mon0 &&
terminator -e netstat -ax &&
terminator -e nmap 192.168.1.1

使用整个终端(airodump)的第一个命令启动正常,我可以看到网络,但它只是停留在该屏幕上。如果我按ctrl + c然后它返回提示但我可以看到错误:用法:终结者[选项]错误没有这样的选项
我希望netstat和nmap命令出现并保留在自己的终端窗口中,我该怎么做?

2 个答案:

答案 0 :(得分:15)

终端窗口由与内部运行的命令分开的程序生成。尝试以下变体之一:

xterm -e airomon-start wlan0 "$channel","$channel" &

gnome-terminal -x airomon-start wlan0 "$channel","$channel" &

konsole -e airomon-start wlan0 "$channel","$channel" &

选择调用您喜欢的终端程序的命令。您必须为要在其自己的窗口中运行的每个命令执行此操作。此外,您需要在每个此类命令行的末尾使用单个& - 而不是双&& - 这些完全不同。你的脚本的最后一行应该只是

wait

这使得它不会从所有终端下面退出,可能导致它们全部死亡。

强制切向shell-scripting nitpick:总是将shell变量用在双引号中,除非你知道一个事实你需要在特定用途上进行分词。

答案 1 :(得分:1)

如果脚本在终端的前台运行,则在交互式命令使用终端时它将暂停。您可以更改脚本以在新终端中运行airodump,或者您可以在启动airodump之前运行后台命令(也许在睡觉之后,如果您担心它们将无法正常工作先跑?)