文章目錄
- gnome-terminal
- Qt 通過QProcess類
- Qt 通過system
gnome-terminal
在Ubuntu中可以使用man gnome-terminal命令查看gnome-terminal的使用指南,也可在ubuntu manuals查看:
NAMEgnome-terminal — 一個終端仿真應用.概要gnome-terminal [-e, --command=STRING] [-x, --execute ] [--window-with-profile=PROFILENAME] [--tab-with-profile=PROFILENAME] [--window-with-profile-internal-id=PROFILEID] [--tab-with-profile-internal-id=PROFILEID] [--role=ROLE] [--show-menubar] [--hide-menubar] [--geometry=GEOMETRY] [--working-directory=DIRNAME] [-?, --help]選項-e, --command=STRING在終端內執行此選項的參數。-x, --execute在終端內執行命令行的其余部分。--window-with-profile=PROFILENAME打開一個新窗口,其中包含具有給定配置文件的選項卡。 可以提供多個這些選項。--tab-with-profile=PROFILENAME在具有給定配置文件的窗口中打開一個選項卡。可以提供多個這些選項,以打開多個選項卡 。--window-with-profile-internal-id=PROFILEID打開一個新窗口,其中包含具有給定配置文件 ID 的選項卡。在內部用于保存會話。--tab-with-profile-internal-id=PROFILEID在窗口中打開具有給定配置文件 ID 的選項卡。 在內部用于保存會話。--role=ROLE為最后一次指定的窗口設置role;僅適用于一個窗口;可以為從命令行創建的每個窗口指定一次。--show-menubar打開最后指定的窗口的菜單欄;僅適用于一個窗口;可以為從命令行創建的每個窗口指定一次。--hide-menubar關閉最后指定的窗口的菜單欄;僅適用于一個窗口;可以為從命令行創建的每個窗口指定一次。--geometry=GEOMETRY指定窗口位置,每個要打開的窗口可以指定一次。--working-directory=DIRNAME將終端的工作目錄設置為 DIRNAME。-?, --help顯示幫助消息。
用法:
gnome-terminal [選項…] [-- 命令 …]
在終端中輸出 gnome-terminal,就會自動彈出一個新的終端.命令執行完或者遇到錯誤后,這個新終端也會閃退。
在bash中 加上exec bash。這樣新終端在執行完命令后也不會退出了,如:
gnome-terminal --bash -c 'python3;exec bash'
– bash -c后面寫的是命令。
參數說明:幫助選項:-h, --help 顯示幫助選項--help-all 顯示全部幫助選項--help-gtk 顯示 GTK+ 選項--help-terminal 顯示終端選項--help-window-options 顯示每個窗口的選項--help-terminal-options 顯示每個終端的選項GTK+ 選項--class=類 窗口管理器所使用的程序類--name=名稱 窗口管理器所使用的程序名--gdk-debug=標志 要設置的 GDK 調試標志--gdk-no-debug=標志 要取消的 GDK 調試標志--gtk-module=模塊 裝入額外的 GTK+ 模塊--g-fatal-warnings 將警告變為嚴重--gtk-debug=標志 要設置的 GTK+ 調試標志--gtk-no-debug=標志 要取消的 GTK+ 調試標志Options to open new windows or terminal tabs; more than one of these may be specified:--window 打開包含默認配置下一個標簽頁的一個新窗口--tab 在最后一個打開的窗口中打開一個默認配置下的新標簽頁Window options; if used before the first --window or --tab argument, sets the default for all windows:--show-menubar 打開菜單欄--hide-menubar 關閉菜單欄--maximize 最大化窗口--full-screen 全屏幕窗口--geometry=幾何形狀 設置窗口大小;例如:80x24,或者 80x24+200+200(列x行+X坐標+Y坐標)--role=角色 設置窗口角色--active 將上次指定的標簽頁設定為所在窗口的當前標簽頁Terminal options; if used before the first --window or --tab argument, sets the default for all terminals:-e, --command 在終端中執行此選項的參數--profile=配置文件名 使用提供的配置文件而非默認配置-t, --title=標題 設置初始終端標題--working-directory=目錄名 設置工作目錄--wait 等待子進程退出--fd=文件描述符 轉發文件描述符--zoom=縮放 設置終端的縮放系數(1.0 = 正常大小)應用程序選項:--load-config=文件 載入一個終端配置文件--preferences 顯示首選項窗口-p, --print-environment 打印與終端交互的環境變量-v, --verbose 增加診斷詳細程度-q, --quiet 抑制輸出--display=顯示 要使用的 X 顯示-t, --title=標題 為打開終端設置初始的標題,便于區分。-c,--command: -c是指cmd ,后面是要執行的命令,雙引號中可以為多個命令命令以分好為結束符號,如果執行多個命令,可以用分號隔開,如:"test1.sh; test2.sh"& 如果需要同時并行啟動多個腳本可以在命令行后面加 & 符號,使命令后臺運行.-e excute: 可以出現多次,要注意 -e 后面只能有一個參數,也就是說 -e 后面的所有需要用引號括起來。如:-e 'bash -c "pwd; exec bash;"'如:gnome-terminal -e 'bash -c "ls; exec bash"'exec bash: 是讓打開的終端在執行完腳本后不關閉一直存在。 如果直接寫bash也行,相當于開了一個子shell。 --window: 表示打開一個終端窗口。如:gnome-terminal --window --window #打開兩個終端如:gnome-terminal --window --tab --window --tab --tab #打開兩個終端,第一個兩個tab,第二個3個tab--tab: 在其中新開辟一個標簽頁,如果還想要更多標簽頁就就繼續加--tab。--profile=配置文件名 使用提供的配置文件而非默認配置--working-directory=目錄名 設置工作目錄--wait 等待子進程退出--fd=文件描述符 轉發文件描述符--zoom=縮放 設置終端的縮放系數(1.0 = 正常大小)$
因為 -x 和 -e 已經被棄用了。所以被取而代之的是 -- 符號,還有就是 bach -c這條命令,因為是在新啟動的終端里執行bash -c,即啟動子shell。改之后如:gnome-terminal --tab -- bach -c "ls"&"gnome-terminal --tab -- bash -c " pwd; exec bash;"[終端啟動后自動執行命令]有兩個參數可以實現這個功能,-e 和 -x,這兩個區別在于:-e 可以出現多次。如果在所有 --window 前面,表示對所有 window 和 tab 起作用。如果在 --window 或者 --tab 后面,表示只針對這個 tab 執行;注意: -e 后面只能有一個參數, 也就是說如果有空格,需要用引號-x 只能出現一次,在-x后面的所有內容,均認為是要執行的命令,所以可以出現空格。這些命令是針對所有tab都執行的.注意: \ 連續符號后面不能跟 注釋,否則注釋后面的內容執行不到。
例子:
gnome-terminal --window --window #打開兩個
gnome-terminal --window --tab --window --tab --tab #打開兩個,第一個兩個tab,第二個3個tab
gnome-terminal -- bash -c "ls; cd ~/lzk; exec bash" #打開一個終端,然后進入某一子目錄
Qt 通過QProcess類
QProcess *process=new QProcess;
process->start("bash"); //啟動終端(Windows下改為cmd)
process->waitForStarted(); //等待啟動完成
process->write("命令"+‘\n’); //向終端寫入命令,注意尾部的“\n”不可省略
Qt 通過system
system("gnome-terminal -x bash -c '設置環境變量; 命令'&");
例子
system("gnome-terminal -- bash -c 'source /opt/ros/melodic/setup.bash ;roscore'&");system("gnome-terminal -- bash -c 'source /opt/ros/melodic/setup.bash ;rosrun turtlesim turtlesim_node'&");system("gnome-terminal -- bash -c 'source /opt/ros/melodic/setup.bash ;rosrun turtlesim turtle_teleop_key'&");
system("gnome-terminal -x bash -c 'source ~/my_ws/devel/setup.bash;roslaunch my_package file.launch'");
注意:system函數中務必添加 source ~/catkin_ws/devel/setup.bash;目的是確保能找到所有相關聯的包(Package);否則將不能運行launch文件;
source /opt/ros/melodic/setup.bash 是配置環境變量
#!/bin/bash
# 腳本名稱: takeoff_land
# 腳本描述: 該腳本為起飛&降落控制demo啟動腳本,包含PX4 SITL,Gazebo仿真環境,無人機控制節點以及起飛&降落控制節點gnome-terminal --window -e 'bash -c "roscore; exec bash"' \
--tab -e 'bash -c "sleep 5; roslaunch prometheus_gazebo sitl_outdoor_1uav.launch; exec bash"' \
--tab -e 'bash -c "sleep 6; roslaunch prometheus_uav_control uav_control_main_outdoor.launch; exec bash"' \
--tab -e 'bash -c "sleep 7; roslaunch prometheus_demo takeoff_land.launch; exec bash"' \
#--tab -e 'bash -c "sleep 7; rosrun prometheus_demo takeoff_land.py; exec bash"' \
sleep命令可以讓腳本暫停執行一段時間,其基本語法為:
sleep <seconds>