Intereting Posts
scp не автозаполняется так же, как другие команды Подписание / Checksumming ядро ​​для предотвращения / обнаружения манипуляций Что вы фильтруете / исключаете список при выполнении резервного копирования с помощью rsync? Как Linux определяет, какие средства использовать для запуска (нетекстового) двоичного кода? Как отобразить имя драйвера звуковой карты из командной строки в Lubuntu 11.10? команда du показывает разные результаты, чем st_blocks Запуск Linux на смартфоне Печатать строки, в которых первое поле имеет только четыре символа, используя регулярное выражение в awk? Как восстановить Ubuntu? Как определить, является ли скрытый текстовый слой в файле PDF из OCR или нет? Переменная восклицательного знака `$!` Как я могу включить полный режим без пробелов в Linux, используя CONFIG_NO_HZ_FULL? Запуск пользовательского скрипта после подключения интерфейса wifi Аккумулятор никогда не прекращает зарядку Привилегии в Linux?

Проблема с именем пользователя su -c "./script.sh" и sudo -u ush bash -c "./script.sh" и Java classpath

Я вижу какое-то странное поведение, которое заставило меня задаться вопросом, как среда отличается при выполнении любой из этих двух команд, в сравнении с использованием su username а затем запускает команды как пользователь один за другим.

 su username -c "cd /opt/scripts/ ; ./script.sh" sudo -u username bash -c "cd /opt/scripts/ ; ./script.sh" 

Я запускаю эти команды как root из сценария init на сервере CentOS 6 Linux.

Я должен указать далее, что проблема заключается в том, что файл script.sh, который запускает java-программу, использует директиву classpath с относительными путями (относительно того, где script.sh) живет (то есть ./classes/com:./lib/common ). Если я su к имени пользователя, то cd к / opt / scripts и запустим ./script.sh, он работает, но команды su и sudo в скрипте кажутся проблемой, в которой классы не найдены, даже если я cd в этот каталог перед запуском скрипта. Почему это так? Как это отличается от использования su, чтобы стать пользователем и запускать команды один за другим?

Попробуйте сравнить среду:

 $ sudo -s # diff <(su username -c env) <(sudo -u username bash -c env) 

Например, среда для sudo контролируется env_* defaults в /etc/sudoers .