Один из программных инструментов, которые я использую, требует, чтобы "sh" был символьной ссылкой, чтобы "колотить" вместо "тире". Так как я не хочу изменять оболочку по умолчанию для избиения за целую систему, и я не могу изменить сам инструмент, я пытаюсь записать сценарий, который исказит sh к/bin/bash. Сам псевдоним не работает, потому что вызов к sh сделан полным путем: /bin/sh
вместо просто sh
.
Существует ли способ одурачить исполняемый файл, что/bin/sh является на самом деле другим файлом, не имея полномочий пользователя root и не влияя на другие программы?
Спасибо
Если незаконным инструментом является достаточно Ламе для вызова /bin/sh
непосредственно, вместо того, чтобы уважать системную установку при помощи /usr/bin/env sh
, опции очень ограничены. Я первоначально думал, что Вы будете в состоянии в основном сделать то, что виртуальные среды делают для Python, но после попытки записать сценарий, который сделал так, я не мог обойти прямой вызов /bin/sh
ни через какой $PATH
волшебство.
/usr/bin/env sh
и отправить запрос получения по запросу. Ура для вкладов с открытым исходным кодом! , Если незаконный инструмент на самом деле не звонит /bin/sh
непосредственно, поскольку Ваш недавний комментарий может указать, следующее должно работать.
#!/usr/bin/env sh
BASH_VENV_HOME=$HOME/.bash_venv
if [ ! -d $BASH_VENV_HOME ]; then
mkdir $BASH_VENV_HOME
fi
# Make an `sh` binary in the front of your path that points to bash
if [ ! -e $BASH_VENV_HOME/sh ]; then
ln -s /bin/bash $BASH_VENV_HOME/sh
fi
orig_path=$PATH
PATH=$BASH_VENV_HOME:$PATH
# Call your tool
# Reset path
PATH=orig_path
инструмент, должен он выполняться sh
, тогда находить тот перед Вашим путем, который является символьной ссылкой на удар.