如何在不同终端并行运行不同目录下的Bash脚本?
在独立终端中并行运行多个Bash脚本
按终端类型选择对应方法
不同桌面环境或系统的终端启动命令不一样,以下是常见场景的解决方案:
GNOME Terminal(GNOME桌面)
直接指定工作目录并启动新窗口运行脚本:
gnome-terminal --working-directory="/path/to/prog1_dir" -- ./prog1.sh & gnome-terminal --working-directory="/path/to/prog2_dir" -- ./prog2.sh &
--working-directory用来指定脚本执行的目录,--区分终端参数和要执行的命令,末尾的&让当前终端不阻塞,能继续执行下一条命令。
Konsole(KDE桌面)
用--workdir指定工作目录,-e指定要运行的脚本:
konsole --workdir="/path/to/prog1_dir" -e ./prog1.sh & konsole --workdir="/path/to/prog2_dir" -e ./prog2.sh &
xterm(轻量通用终端)
xterm没有直接指定工作目录的参数,先切换目录再执行脚本:
xterm -e "cd /path/to/prog1_dir && ./prog1.sh" & xterm -e "cd /path/to/prog2_dir && ./prog2.sh" &
macOS(Terminal/iTerm2)
- 自带Terminal.app:
osascript -e 'tell application "Terminal" to do script "cd /path/to/prog1_dir && ./prog1.sh"' & osascript -e 'tell application "Terminal" to do script "cd /path/to/prog2_dir && ./prog2.sh"' & - iTerm2:
osascript -e 'tell application "iTerm" to create window with default profile command "cd /path/to/prog1_dir && ./prog1.sh"' & osascript -e 'tell application "iTerm" to create window with default profile command "cd /path/to/prog2_dir && ./prog2.sh"' &
批量处理多个脚本
如果要运行的脚本数量多,可以写个循环脚本批量处理,比如创建run_scripts.sh:
#!/bin/bash # 按"工作目录 脚本名"的格式添加所有要运行的项 scripts=( "/path/to/prog1_dir prog1.sh" "/path/to/prog2_dir prog2.sh" "/path/to/prog3_dir prog3.sh" ) # 这里以GNOME Terminal为例,换成你用的终端命令即可 for item in "${scripts[@]}"; do read dir script <<< "$item" gnome-terminal --working-directory="$dir" -- ./"$script" & done
给脚本加执行权限后运行:
chmod +x run_scripts.sh ./run_scripts.sh
替代方案:用终端复用工具(不用开多个窗口)
如果不想打开一堆终端窗口,可以用tmux或screen在同一个终端内分窗运行:
tmux操作步骤
- 先启动tmux:
tmux - 手动分窗运行:
- 水平分窗:按下
Ctrl+b再按%,在新窗格里执行cd /path/to/prog1_dir && ./prog1.sh - 垂直分窗:按下
Ctrl+b再按",在新窗格里执行cd /path/to/prog2_dir && ./prog2.sh
- 水平分窗:按下
- 也可以用命令直接创建分窗会话:
tmux new-session -d -s script_session "cd /path/to/prog1_dir && ./prog1.sh" tmux split-window -h -t script_session "cd /path/to/prog2_dir && ./prog2.sh" tmux attach -t script_session
内容的提问来源于stack exchange,提问作者Raiyan Chowdhury
相关产品推荐
相关产品推荐

