Рейтинг:0

Как запустить команду в ранее открытом терминале с помощью команды gnome-terminal в сценарии оболочки?

флаг cn

Я хочу запустить исходный код, для которого нужны четыре терминала A, B, C и D. В Ubuntu есть несколько команд для исходного кода. Эти команды нужно запускать по порядку в терминалах А, В, С, D, А, В и С. На самом деле эти команды взаимосвязаны и должны выполняться именно в таком порядке.

Я хочу автоматически запускать исходный код с помощью сценариев оболочки. Я уже написал сценарий оболочки, который открывает несколько терминалов с помощью гном-терминал и это работает хорошо до сих пор:

gnome-terminal --title="A" -- bash -c "cd ~; ./myscript1; exec bash"
gnome-terminal --title="B" -- bash -c "cd ~; ./myscript2; exec bash"
gnome-terminal --title="C" -- bash -c "cd ~; ./myscript3; exec bash"
gnome-terminal --title="D" -- bash -c "cd ~; ./myscript4; exec bash"

Теперь я хочу вернуться к терминалу А и запустите в нем другую команду.

Следующий оператор не работает нормально, он открывает новый терминал!

gnome-terminal --title="A" -- bash -c "cd ~; команда; exec bash"

Я не понял, как это сделать после прочтения справочных страниц Gnome-терминала и поиска в сети.

Doug Smythies avatar
флаг gn
Вы можете передать токен из myscript3 в myscript1, скажем, через именованный канал. Сделав все остальное, myscript1 будет ждать токена, а myscript3 отправит его только в соответствующее время.
sudodus avatar
флаг jp
Также можно общаться через существование файла.
N. S. avatar
флаг cn
@судодус. Какой файл вы имеете в виду?!
sudodus avatar
флаг jp
Вы можете позволить процессу в одном окне терминала создать файл и неоднократно проверять его, а процессу в другом окне удалить его, когда он будет готов. Или наоборот: пусть процесс в одном окне терминала подождет, пока файл не появится, и пусть процесс в другом окне создаст этот файл, когда он будет готов.Имя файла может быть временным файлом (или набором временных файлов), а имя (имена) может контролироваться основным скриптом оболочки, который инициирует процессы в четырех окнах терминала. - Такой файл может быть пустым или содержать сообщение.
N. S. avatar
флаг cn
Я создал 2 сценария bash «A» и «B» и сценарий «run», который запускает «A» и «B» параллельно. Содержимое «выполнить»: bash ./A & bash ./B & wait. Я жду в «А» создания файла с оператором «пока», а в «Б» я создаю этот файл, но никакие команды из «А» не выполняются.
raj avatar
флаг cn
raj
Должно быть 4 отдельных окна gnome-terminal? Или может быть одно окно с 4-мя отдельными, переключаемыми терминальными сессиями? Потому что в последнем случае вы можете использовать «ожидаемый» сценарий в сочетании с «экраном» (где вы запускаете 4 сеанса в «экране»), чтобы получить желаемое поведение.
Рейтинг:2
флаг cn

Вы не можете, за исключением, возможно, хакерского способа с использованием имитации нажатия клавиш. например xdotool чтобы вернуться к первому окну, затем вставьте несколько команд.

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

N. S. avatar
флаг cn
Я отредактировал свой вопрос и добавил дополнительные пояснения. Спасибо, что заглянули...
Рейтинг:1
флаг jp

Попробуйте запустить следующую демонстрацию А и Б

А мастер скрипт создает временный файл (в /tmp) и начинается сценарий и b-скрипт в xterm окна.

Установить

sudo apt установить xterm

Поместите все скрипты в специальный каталог, сделайте их исполняемыми и запустите

./мастер

мастер:

#!/бин/баш

эхо "$0 старт"

b4a=$(мктемп)

nohup xterm -fa default -e ./a-script "$b4a" 2> /dev/null &
nohup xterm -fa default -e ./b-script "$b4a" 2> /dev/null &

если тест -f "$b4a"
тогда
 гм "$b4a"
фи
эхо "$0 готово"

сценарий:

#!/бин/баш

эхо "$0 старт"
echo "Здесь $0 может что-то делать..."
пока ! тест -f "$1"
делать
 спать 1
 эхо -н "."
сделано
эхо ""
echo "Здесь $0 может что-то делать..."
м "1 доллар"
read -p "$0: Нажмите Enter, чтобы закончить"

b-скрипт:

#!/бин/баш

эхо "$0 старт"
echo "Здесь $0 может что-то делать..."
спать 5
коснитесь "$1"
read -p "$0: Нажмите Enter, чтобы закончить"
N. S. avatar
флаг cn
Спасибо за Ваш ответ. Я уже написал эти скрипты, но я думаю, что проблема связана с моими докер-контейнерами! Действительно, я запускаю два контейнера в a-script и b-script, и после этого я хочу запустить некоторые команды в этих контейнерах. Когда я пишу некоторые команды в скрипте после цикла while, эти команды не будут выполняться в соответствующем контейнере.
sudodus avatar
флаг jp
Почему вы запускаете два контейнера в a-script и b-script? И почему вы используете четыре терминальных окна? -- Вероятно, можно настроить структуру задачи проще, что сделает работу с меньшими проблемами. Если вы сообщите нам (или только мне, если вы не хотите обнародовать задачу), вы можете получить помощь со структурой.
N. S. avatar
флаг cn
Как я могу сказать только вам? Спасибо за вашу помощь
sudodus avatar
флаг jp
@Н.С. Вы можете получить идентификатор пользователя на [форумах Ubuntu] (https://ubuntuforums.org) и общаться через сообщения форумов Ubuntu (мой идентификатор пользователя там тоже «sudodus»).
N. S. avatar
флаг cn
Мне очень жаль. Я не знаю, как общаться с вами через форумы Ubuntu! :(

Ответить или комментировать

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