Подтвердить что ты не робот

Избегайте закрытия gnome-терминала после выполнения script?

Я создал bash script, который открывает несколько гномов-терминалов, подключается к компьютерам класса через ssh и запускает script.

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

Вот пример моего кода:

gnome-terminal -e "ssh [email protected]<ip> cd /tmp && ls"
4b9b3361

Ответ 1

Как я понимаю, вы хотите открыть gnome-terminal, выполнить некоторые команды и затем перейти к приглашению, чтобы вы могли ввести еще несколько команд. Gnome-терминал не предназначен для этого варианта использования, но есть обходные пути:

Пусть gnome-terminal запустит bash и сообщит bash для запуска ваших команд, а затем запустите bash

$ gnome-terminal -e "bash -c \"echo foo; echo bar; exec bash\""

exec bash в конце необходимо, потому что bash -c завершается после выполнения команд. exec заставляет выполняемый процесс заменяться новым процессом, иначе у вас будет два процесса bash.

Пусть gnome-terminal запускает bash с подготовленным rcfile, который запускает ваши команды

Подготовить somercfile:

source ~/.bashrc
echo foo
echo bar

Затем запустите:

$ gnome-terminal -e "bash --rcfile somercfile"

Пусть gnome-terminal запускает script, который запускает ваши команды, а затем падает до bash

Подготовить scripttobash:

#!/bin/sh
echo foo
echo bar
exec bash

Установите этот файл как исполняемый файл.

Затем запустите:

$ gnome-terminal -e "./scripttobash"

В качестве альтернативы вы можете сделать genericscripttobash:

#!/bin/sh
for command in "[email protected]"; do
  $command
done
exec bash

Затем запустите:

$ gnome-terminal -e "./genericscripttobash \"echo foo\" \"echo bar\""

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

Все, что сказал, это может быть полезно для вас: http://www.linux.com/archive/feature/151340

Ответ 2

  • Ответ на переполнение стека: терминал закрывается, когда команда запускается внутри нее, поэтому вам нужно написать команду, которая не завершается немедленно. Например, чтобы оставить окно терминала открытым, пока вы не нажмете Enter в нем:

    gnome-terminal -e "ssh host 'cd /tmp && ls'; read line"
    
    Ответ
  • Суперпользователь: Создайте профиль, в котором предпочтение "Заголовок и команда/Когда команда выходит" установлена ​​на "Удерживать терминал открытым". Вызовите gnome-terminal с опцией --window-with-profile или --tab-with-profile, чтобы указать имя терминала.

Ответ 3

Наконец, это работает для меня:

gnome-terminal --working-directory=WORK_DIR -x bash -c "COMMAND; bash"

Ответ 4

Запустите с помощью -ic вместо -i, чтобы закрыть терминал bash proccess при закрытии терминала gui:

gnome-terminal -e "bash -ic \"echo foo; echo bar; exec bash\""

Ответ 5

Идеальное решение - запросить ввод пользователя с эхом " Нажмите любую клавишу".

Но если дважды щелкните в Nautis или Nemo и выберите "запустить" в терминале, он, похоже, не работает.

В случае Ubuntu используется оболочка, предназначенная для быстрого запуска и выполнения с использованием только стандартных функций, называемых dash. Из-за этого shebang - это самая первая строка, начинающаяся с , позволяющая правильно использовать функции bash. Обычно это будет: #!/Bin/bash или аналогичный. В Ubuntu я узнал, что это должно быть: #!/Usr/bin/env bash.

Существует много обходных путей для сохранения экрана до того, как интерпретатор увидит синтаксическую ошибку в команде bash.

Решение в Ubuntu, которое работало для меня:

#!/usr/bin/env bash

your code

echo Press a key...
read -n1

Ответ 6

Если вы запустите bash script, просто добавьте gedit afile в конец script и удерживайте gnome-terminal открытым. "Файл" может быть журналом сборки, который был в моем случае.

Не пыталась просто использовать только gedit, но это тоже правильно работало.

Ответ 7

Используйте команду nohup.

nohup gnome-terminal -e "ssh [email protected] cd /tmp && ls"

Надеюсь, это поможет вам.