Я пытаюсь сделать скрипт 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
уже существующего и не запускать mkdir
команду, если она есть. Можно также проверить, что у него есть 2 параметра с правильным форматом и т. д.
По умолчанию он не прикрепляется к сеансу, поэтому вы возвращаетесь обратно в свою оболочку. Раскомментируйте последнюю строку для присоединения или запустите это вручную: (замените newsess, если вы изменили значение $sessname
)
tmux attach -t newsess
Пожалуйста, дайте мне знать, если это вам подойдет.