Избегайте закрытия gnome-терминала после выполнения script?
Я создал bash script, который открывает несколько гномов-терминалов, подключается к компьютерам класса через ssh и запускает script.
Как я могу избежать закрытия терминала gnome после завершения script? Обратите внимание, что я также хочу иметь возможность вводить дополнительные команды в терминал.
Вот пример моего кода:
gnome-terminal -e "ssh [email protected]<ip> cd /tmp && ls"
Ответы
Ответ 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"
Надеюсь, это поможет вам.