Передача содержимого скрипта bash для выполнения в той же оболочке, что и при выполнении двоичного файла
Некоторое время назад у меня был этот ответ, но я не могу вспомнить, насколько точно был синтаксис. У меня есть два файла. Одним из них является двоичный файл с именем "changeuid", а вторым - "do.sh". Мне нужно запустить changeuid, который изменит мой uid, и после выполнения будет выполнен контент do.sh, который состоит из списка команд, доступных только для uid, предоставленного сценарием changeuid. Что я не помню, так это как это было сделано. Я тестировал несколько вариантов, ни один из которых не работал, или, может быть, задачи внутри них, которые не были похожи на те, которые делают оригинальные, были неправильными. Так что.. может быть:
./changeuid < sh do.sh
./changeuid < . do.sh
./changeuid < source do.sh
source do.sh < ./changeuid
sh do.sh < ./changeuid
Решение? Спасибо заранее.
2 ответа
После некоторого реального теста выяснили... правильное решение было:
./changeuid < ./script.sh
Я не понял, потому что чего-то еще не хватало.
Это скорее зависит от того, что именно changeuid
программа делает.
Я подозреваю, что он предназначен для изменения вашего uid на заданное значение, затем запускает другую программу и затем завершает работу (к этому моменту вы вернетесь к своему обычному пользователю). Если это так, тогда вам понадобится передать другую программу в качестве аргумента:
./changeuid do.sh
Вам также понадобятся оба changeuid
а также do.sh
быть исполняемым.
Я не совсем уверен, почему вам нужен отдельный changeuid
Программа для этого, однако. Есть три способа сделать это стандартными командами Linux: использовать su
, или же sudo
, или же runuser
, Какой из них вы выберете, будет зависеть от того, используете ли вы уже это как root.
Для получения дополнительной информации, попробуйте man su
, так далее.
Если changeuid
принимает команды для запуска на стандартный ввод, тогда это будет
./changeuid < do.sh