如何编写一个 Bash 脚本来打开 tmux、运行多行命令,然后与 tmux 分离?

如何编写一个 Bash 脚本来打开 tmux、运行多行命令,然后与 tmux 分离?

我正在尝试编写一个 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

如果它对您有用,请告诉我。

相关内容