2013-08-28 2 views
1

Я пытаюсь запустить некоторые вещи на сервере моей команды и с некоторыми трудностями.Использование perl для запуска более одной системной команды в строке

Для части того, что я использую для написания сценариев, мне нужно, чтобы пользователь переключил пользователя через sudo su APPUSER, а затем выполнил несколько команд. Однако sudo скорее заблокирован на нашем сервере, и я не могу запустить что-то вроде: sudo su APPUSER -c COMMAND. Я попросил, чтобы это было исправлено, системные администраторы всегда говорят «нет».

В настоящее время я использую perl для создания сценариев, и мне нужно заглянуть в appuser вместо пользователя разработчика, чтобы запустить около трех команд. Я могу сделать это в командной строке, выполнив каждую команду подряд, но я не знаю, как получить perl для этого.

Как я могу заставить perl выполнить более одной команды в командной строке так, чтобы она не отбрасывала оболочку/состояние после предыдущего выполнения? то есть выполнение нескольких вызовов system не работает.

+0

Почему бы не поместить команды в сценарий оболочки и использовать Perl для запуска этого? – SheetJS

+0

Почему perl, когда он уже находится в оболочке и использует только 'system' –

+0

Поскольку скрипты, будь то shell или perl, выполняются изначально как пользователь dev. Ни один из них не может успешно попасть в appuser, если не сделать вручную, чего я надеюсь избежать. – Malfist

ответ

0

Не работает ли это?

system("sudo su APPUSER && command1 && command2"); 
+0

Нет, это приведет к запуску sudo su в качестве пользователя приложения, а затем запустите команду command1 и command2 после выхода из оболочки APPUSER. – Malfist

1

Я нашел решение.

Открыть процесс Баш и читать и писать:

#!/usr/bin/perl 
use strict; 
use warnings; 

open(BASH, "|-", "bash"); 

print BASH "sudo su APPUSER\n"; 
print BASH "touch /home/APPUSER/sudobashtest\n"; 
close(BASH); 
Смежные вопросы