Запустить сценарий от имени администратора (запрос пароля) из графического интерфейса xfce

Поведение, которое вы ищете, это специальный случай:

cp -R [-H|-L|-P] [-fip] source_file... цель...

[Эта] форма обозначается двумя или более операндами, в которых указана опция -R. Утилита cp должна скопировать каждый файл в файловой иерархии, корневой в каждом файле source_file, в целевой путь с именем:

  • Если целевой существует и называет существующую директорию, то именем соответствующего целевого пути для каждого файла в файловой иерархии должно быть конкатенация целевого, один символ, если целевой не заканчивался на , и путь к файлу относительно директории, содержащей исходный_файл.
  • Если целевой не существует и указаны два операндов, то имя соответствующего пути назначения для файла source_file должно быть целевым; именем соответствующего пути назначения для всех остальных файлов в файловой иерархии должно быть конкатенация целевого, символ , а также путь к файлу относительно директории, содержащей файл source_file.

Это должно быть ошибкой, если целевой не существует и указано более двух операндов ...

Поэтому я бы сказал, что невозможно заставить cp делать то, что вы хотите.


Так как ваше ожидаемое поведение "cp -r dir1 dir2 (когда dir2 уже существует) удалит существующий dir2 (и любое содержимое) и заменит его на dir1":

rm -rf dir2 && cp -r dir1 dir2

Вам даже не нужно проверять, существует ли dir2.


Решением rsync было бы добавление трейлинга / к источнику, чтобы он не копировал сам dir1 в dir2, а копировал содержимое dir1 в dir2 (при этом существующие файлы все равно останутся в dir2):

$ tree dir*
dir1
└── test.txt
dir2
└── test2.txt

0 directories, 2 file
$ rsync -a dir1/ dir2
$ tree dir*           
dir1
└── test.txt
dir2
└── test.txt
└── test2.txt

0 directories, 3 files
$ rm -r dir2          
$ rsync -a dir1/ dir2
$ tree dir*           
dir1
└── test.txt
dir2
└── test.txt

0 directories, 2 files

0
13.04.2017, 15:36
2 ответа

Вы можете использовать gksudo , который является интерфейсом GTK + для su / sudo.

sudo запрашивает пароль в командной строке, и gksudo открывает для него диалоговое окно.

Соответствующая справочная страница

0
28.01.2020, 02:50

Вы можете установить правило sudo, чтобы либо все пользователи, либо некоторые определенные пользователи, и/или все члены определенной группы могли запускать скрипт без пароля. например. в /etc/sudoers:

Cmnd_Alias MYSCRIPT = /usr/local/sbin/mountscript.sh
...
...
cas ALL = NOPASSWD: MYSCRIPT
%admin ALL = NOPASSWD: MYSCRIPT

Это позволяет пользователю cas и всем членам группы admin запускать /usr/local/sbin/mountscript.sh от имени root без необходимости вводить пароль.

mountscript.sh должен быть предельно простым. Лучше всего, если он не будет принимать никаких аргументов и вообще никаких действий от пользователя, а просто будет выполнять фиксированный набор операций (например, монтировать файловую систему в определенное место и затем завершать работу)

При необходимости можно также unmountscript. sh, установленный в sudo таким же образом... просто добавьте /usr/local/sbin/unmountscript.sh в конец строки определения Cmnd_Alias.

Наконец, ваш значок на рабочем столе будет либо:

  1. запускать sudo /usr/local/sbin/mountscript.sh , либо
  2. запускать сценарий оболочки-обертки, который не делает ничего, кроме sudo /usr/local/sbin/mountscript.sh

в обоих случаях все упомянутые сценарии должны быть mdae исполняемыми с chmod

1
28.01.2020, 02:50

Теги

Похожие вопросы