2

У меня есть следующий скрипт - он вроде работает.

#!/bin/bash  

... define plugins, etc

for plugin in ${plugins[@]};
do 
  screen -t $plugin
done

Хочу я хочу это сделать

откройте gnu-screen и для каждого плагина (который является именем каталога) откройте новую вкладку с именем плагина в качестве заголовка вкладки.

Что это делает сейчас

открывает gnu-screen и открывает первый плагин в экземпляре экрана (с правильным названием), но не продолжает выполнять команды. поэтому, когда я выхожу из первого экрана, второй плагин открывается в экземпляре экрана, когда я выхожу из него, третий открывается и т. д.

Чего мне не хватает

Я хотел бы просто сказать screen -t $plugin && , как в, запустить эту вещь, а затем запустить следующую. но я не уверен, как это сделать в цикле

3 ответа3

2
#!/bin/bash

plugins=(Plugin1 Plugin2 Plugin3)

plugin_cmd="#!/bin/bash\necho This is plugin __placeholder__\n"
for plugin in ${plugins[@]};
do
    echo -e ${plugin_cmd/__placeholder__/$plugin} > /tmp/${plugin}.bash
    chmod +x /tmp/${plugin}.bash
    screen -dmS $plugin
    screen -S $plugin -X stuff "/tmp/${plugin}.bash\n"
    screen -d -r -S $plugin
done

Воспользуйтесь советом Тома Виггера и переключитесь на tmux.

1

Почему бы не создать собственный .screenrc?

Например, если ваша папка с плагинами меняется не часто, запишите это в файл.

# Setting custom things:
startup_message off   

# starting a few shells with a preselected title
screen -t plugin1 0
screen -t plugin2 1
screen -t plugin3 2
screen -t my_email  -a -l exec elm  


Если количество плагинов меняется часто, вы можете использовать свой bash-скрипт для записи их в файл. Например

rm ~/my_custom_screenrc
echo "# Setting custom things:" > ~/my_custom_screenrc
echo "startup_message off"      >> ~/my_custom_screenrc

Затем следует сценарий bash, в котором вы меняете

for plugin in ${plugins[@]};
do 
  screen -t $plugin
done

с эхом добавить (>>) в тот же файл, что и выше.

Наконец стартовый экран. Например, screen -c ~/my_custom_screenrc


Это далеко не идеальный ответ, и я ожидаю таких правильных ответов в течение недели. Но я не видел возможности опубликовать это в качестве комментария и по-прежнему сохранять достаточную разметку, чтобы сделать его понятным.

0

Тебе стоит попробовать:

screen -t $plugin xterm &

вместо твоей версии. на экране откроется новая оболочка, внутри которой вы окажетесь в ловушке, без возможности продолжения цикла do ; таким образом, амперсанд гарантирует, что управление немедленно возвращается в цикл do , в то время как xterm (или konsole, или что угодно) дает, так сказать, место, где screen выполняет свою работу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .