У меня есть сценарий bash, который я использую для автоматизации проверки SVN. Содержимое файла:
#!/bin/bash
cd /var/www-cake
sudo svn checkout file:///usr/local/svn/bash_repo/repo/
Затем, когда я дважды щелкнул файл, он спросит меня, что делать, я бы нажал кнопку «Запустить в терминале», а затем выскочил терминал и спросите меня пароль SUDO. Я бы ввел его, скрипт выполнил бы и терминал закроется.
Я хотел дать какое-то указание на то, что сценарий успешно запущен, поэтому я отредактировал свой файл так:
#!/bin/bash
cd /var/www-cake
sudo svn checkout file:///usr/local/svn/bash_repo/repo/
echo "Head revision has been pushed to live server"
Я ожидал, что терминал останется открытым и сообщит мне сообщение позже. К моему удивлению, теперь он открывается и сразу же закрывается. Скрипт выполняется, и мне больше не нужно вводить пароль SUDO.
Правильно ли это? Я не понимаю, почему это происходит, похоже, проблема безопасности.
Что происходит, когда вы запускаете скрипт непосредственно с терминала? Обычно, если пароль sudo был введен, как только он запомнится на 15 минут. Если вы запустите его графически, подсказка терминала закроется после полного выполнения. У меня нет SVN-репо для игры, однако я сделал аналогичный тест, который соберет вход пользователя и коснется файла с помощью этого имени.
#!/usr/bin/env bash
echo -n "Hello, enter the file name: "
read NAME
touch $NAME
echo "All done"
При выполнении с терминала:
Затем дважды щелкнут:
Приглашение закрывается, когда полный, но делает то, что требуется.
Чтобы открыть приглашение после выполнения скрипта, вы можете попробовать две вещи:
Добавить команду read в качестве последней строки. Чтобы создать пусковую установку, которая выполняет команду в терминале и держит окно открытым, создайте профиль для gnome-терминала, например Hold, который делает именно это (просмотрите параметры профиля) и используйте следующее.gnome-terminal --window-with-profile="Hold" -e "/path/to/script"