Избегать закрытия gnome-терминала после выполнения скрипта? - PullRequest
59 голосов
/ 18 августа 2010

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

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

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

gnome-terminal -e "ssh root@<ip> cd /tmp && ls"

Ответы [ 7 ]

85 голосов
/ 20 августа 2010

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

Пусть gnome-терминал запускает bash и сообщает bash, что нужно запускать ваши команды, а затем запускает bash

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

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

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

Prepare somercfile:

source ~/.bashrc
echo foo
echo bar

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

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

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

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

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

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

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

$ gnome-terminal -e "./scripttobash"

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

#!/bin/sh
for command in "$@"; do
  $command
done
exec bash

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

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

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

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

13 голосов
/ 19 января 2011

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

gnome-terminal --working-directory=WORK_DIR -x bash -c "COMMAND; bash"
11 голосов
/ 18 августа 2010
  • Ответ переполнения стека: терминал закрывается после завершения выполнения команды внутри него, поэтому вам нужно написать команду, которая не завершается немедленно. Например, чтобы оставить окно терминала открытым, пока вы не нажмете Введите в него :

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

5 голосов
/ 11 ноября 2014

Запустите с -ic вместо -i, чтобы завершить процесс закрытия терминала bash при закрытии интерфейса терминала:

gnome-terminal -e "bash -ic \"echo foo; echo bar; exec bash\""
0 голосов
/ 16 февраля 2016

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

Но если дважды щелкнуть в 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
0 голосов
/ 30 июня 2013

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

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

0 голосов
/ 18 августа 2010

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

nohup gnome-terminal -e "ssh root@ cd /tmp && ls"

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

...