Передача содержимого скрипта 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
Другие вопросы по тегам