Ок, понял. Highlight не принимает переменные в качестве аргументов, поэтому вам нужно использовать :exe
, чтобы обойти это. Так что это работает:
if has_key(g:plugs, 'ale')
exe 'highlight ALEErrorSign guifg=' . vim_ale_error_fg 'guibg=' . vim_ale_error_bg
exe 'highlight ALEWarningSign guifg=' . vim_ale_warning_fg 'guibg=' . vim_ale_warning_bg
endif
См. также: https://stackoverflow.com/a/2211738/5918874
Если я поймите правильно, вы хотите выполнить скрипт как владелец файла, а не как текущий пользователь (пользователь apache).
Если это то, что вы хотите, вас может заинтересовать setuid.
Краткое описаниетого, как это работает, было опубликовано ранее.
Если я правильно понял вашу проблему и вас не волнуют риски безопасности, вы можете установить sudo, добавить «www -data» (www -data — это пользователь по умолчанию, используемый nginx/apache )в файл sudoers со всеми разрешениями и без пароля, и использовать его для выполнения команды от имени другого пользователя.
Можно сделать так:
Установить судо:
apt-get install sudo
Затем добавить пользователя в конфиг:
nano /etc/sudoers
Добавьте это в последнюю строку:
www-data ALL=(ALL) NOPASSWD: ALL
И, наконец, вы можете отредактировать свой php для выполнения команды с помощью sudo:
shell_exec('sudo -u testuser /var/www/html/copy.sh');
@Редактировать
Мне удалось заставить его работать на моем сервере. Просто следуйте этим шагам, и это должно сработать и для вас.
Попробуйте заменить код PHP на этот:
<?php
echo shell_exec('/bin/sh /var/www/html/copy.sh'); #this will display the result in your browser
echo "<pre>";
echo file_get_contents("ltylog.txt");
echo "<pre>";
?>
Затем убедитесь, что данные www -имеют доступ к файлу copy.sh:
Вы можете либо дать ему 777 chmod, как этот:
chmod 777 /var/www/html/copy.sh
или вы можете сделать так, чтобы файл принадлежал пользователю www -data (, используемому apache):
chown www-data:www-data /var/www/html/copy.sh
но если вы решите использовать второй вариант, убедитесь, что данные www -все еще могут выполнить файл, применив chmod следующим образом:
chmod 755 /var/www/html/copy.sh
Сделать файл исполняемым:
chmod +x /var/www/html/copy.sh
измените код copy.sh на этот:
rsync -rzv -e 'ssh -p 199' test.txt testuser@192.168.1.79:/home/testuser/txt
ssh testuser@192.168.1.79 -p 199 /bin/sh /home/testuser/lty.sh > ltylog.txt 2>&1
Наконец, убедитесь, что у пользователя testuser есть доступ к следующим файлам:
Если вас не волнует безопасность, вы можете просто ввести это в консоли удаленного сервера
chmod 777 -R /home/
Или вы можете проверить каждый файл вручную, чтобы убедиться, что разрешения установлены правильно.