![如何编写一个 Bash 脚本来打开 tmux、运行多行命令,然后与 tmux 分离?](https://linux22.com/image/1070490/%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%E4%B8%80%E4%B8%AA%20Bash%20%E8%84%9A%E6%9C%AC%E6%9D%A5%E6%89%93%E5%BC%80%20tmux%E3%80%81%E8%BF%90%E8%A1%8C%E5%A4%9A%E8%A1%8C%E5%91%BD%E4%BB%A4%EF%BC%8C%E7%84%B6%E5%90%8E%E4%B8%8E%20tmux%20%E5%88%86%E7%A6%BB%EF%BC%9F.png)
我正在尝试编写一个 Bash 脚本,打开 tmux 并运行几行命令,然后将其分离,这样完成后我就可以进入我的终端了。我该如何解决这个问题?试过了所有方法。
≈#!/bin/bash
cd ~/data
mkdir $1
这是我目前得到的结果。运行 Bash 脚本时,我输入:
myScript folder_name https://myurl.com
现在我想启动一个 tmux 会话并运行:
screamingfrogseospider \
--crawl $2 \
--headless \
--save-crawl \
--output-folder ~/data/$1 \
--timestamped-output \
但是我如何编写一个脚本来打开 tmux 并运行这些行并关闭,同时运行 tmux 分离,以便我最终进入终端窗口?
答案1
这应该有效:
#!/bin/bash
sessname="newsess"
cd ~/data
mkdir "$1"
# Create a new session named "$sessname", and run command
tmux new-session -d -s "$sessname"
tmux send-keys -t "$sessname" "screamingfrogseospider --crawl $2 --headless --save-crawl --output-folder ~/data/$1 --timestamped-output" Enter
# Attach to session named "$sessname"
#tmux attach -t "$sessname"
这将创建一个 tmux 会话,其名称在变量中设置$sessname
- 您也可以$1
根据需要将其用作会话名称。然后,它会获取您的 2 个参数,创建一个具有给定名称的 tmux 会话并运行命令。
为了使脚本更具弹性,您应该添加检查以查看它是否已经存在,如果存在~/data/$1
则不运行该命令。您还可以检查它是否具有 2 个格式正确的参数等。mkdir
默认情况下,它不会附加到会话,因此您需要返回到 shell。取消注释最后一行以附加,或手动运行此命令:(如果更改了 的值,请替换 newsess $sessname
)
tmux attach -t newsess
如果它对您有用,请告诉我。