У меня есть скрипт bash, который я использую для автоматизации проверки SVN. Содержимое файла было:
#!/bin/bash
cd /var/www-cake
sudo svn checkout file:///usr/local/svn/bash_repo/repo/
Затем, когда я дважды щелкнул по файлу, меня спросили, что делать, я бы нажал кнопку « Run In Terminal », а затем терминал будет всплывать и спрашивать у меня пароль 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 минут). Вы можете заставить sudo забыть пароль, запустив sudo -k
Чтобы оставить приглашение открытым после выполнения сценария, вы можете попробовать две вещи:
read
в качестве последней строки. Чтобы создать модуль запуска, который выполняет команду в терминале и держит окно открытым, создайте профиль для gnome-терминал, скажем Hold, который делает именно это (посмотрите параметры профиля) и используйте следующее.
gnome-terminal --window-with-profile="Hold" -e "/path/to/script"
Что происходит, когда вы запускаете скрипт прямо из терминала? Обычно, если пароль sudo был введен один раз, его запомнили на 15 минут. Если вы запустите графически, подсказка терминала закроется после полного выполнения. У меня нет репозитория SVN, чтобы играть с ним - однако я провел аналогичный тест, который соберет информацию от пользователя и коснется файла с этим именем.
#!/usr/bin/env bash
echo -n "Hello, enter the file name: "
read NAME
touch $NAME
echo "All done"
При выполнении с терминала:
Затем дважды щелкните:
[ 119]
Приглашение закрывается, когда завершается, но выполняет то, что запрашивается.