скрипт для создания нового shell и выделения новых команд в новом shell, а не в старом

У меня есть обычный командный сценарий shell csh, который имеет следующую структуру. Я хочу порождать новые терминалы и выполнять некоторые последующие команды В созданных новых оболочках.

xterm & ;
исходный текст myscript.scr; cd fred; run_tool &

xterm & ; source myscript.scr; cd bill ; run_tool &

Я запускаю свой скрипт в терминале csh под названием, скажем, term1. Итак, первая часть - я хочу открыть новый терминал term2, а затем в этом вновь открытом терминале term2 выполнить следующие несколько команд. Затем я также хочу открыть еще один терминал от исходного терминала term1 и выполнить некоторые другие команды в этом новом терминале, скажем term3

Я обнаружил, что новый терминал term2 создается, но затем команды, которые следуют за ним, выполняются в исходном терминале term1, а не в новом терминале term2.

Пожалуйста, подскажите, как сделать так, чтобы мои последующие команды "переносились" в новую оболочку для выполнения там, отметив также, что мне нужно вернуться и создать новый терминал

0
12.01.2017, 19:24
2 ответа

Использование:

xterm -e "myscript.scr; cd fred; run _tool" &
xterm -e "source myscript.scr; cd bull; run_tool" &

Переключатель -e выполнит указана команда внутри сеанса xterm , а не после it, как в вашем примере.

На странице руководства:

-e программа [аргументы ...]

Эта опция указывает программу (и ее аргументы командной строки), которая должна быть запущена в окне xterm. Он также устанавливает заголовок окна и имя значка как базовое имя выполняемой программы, если в командной строке не указаны ни -T, ни -n. Это должен быть последний параметр в командной строке.

1
28.01.2020, 02:46

Я думаю, что вам нужно что-то вроде этого

xterm &
(source myscript.scr; cd fred; run_tool ) & 

В этом случае первая команда будет запущена в текущем сеансе оболочки и будет переведена в фоновый режим. Вторая команда будет запущена в новом сеансе, созданном из текущего сеанса, а также в фоновом режиме.

Однако меня немного смущает использование вами в вопросе «терминала» и «оболочки». Вы пытаетесь загрузить новое интерактивное окно терминала? Или просто запускать команды, не затрагивая текущий сеанс оболочки?

Обычно я делаю следующее, чтобы мои действия не влияли на мой текущий сеанс:

for my_dir in $some_list_of_dirs; do
    (
    cd "$my_dir"
    do stuff
    )
done

Таким образом, ваш рабочий каталог не будет изменен в основном сеансе, только в подсессии, и любые изменения, которые вы вносите в свою среду в подсессии, не будут распространяться на основной сеанс.

0
28.01.2020, 02:46

Теги

Похожие вопросы