Используйте псевдоним в сценарии

Один из программных инструментов, которые я использую, требует, чтобы "sh" был символьной ссылкой, чтобы "колотить" вместо "тире". Так как я не хочу изменять оболочку по умолчанию для избиения за целую систему, и я не могу изменить сам инструмент, я пытаюсь записать сценарий, который исказит sh к/bin/bash. Сам псевдоним не работает, потому что вызов к sh сделан полным путем: /bin/sh вместо просто sh.

Существует ли способ одурачить исполняемый файл, что/bin/sh является на самом деле другим файлом, не имея полномочий пользователя root и не влияя на другие программы?

Спасибо

0
задан 8 August 2014 в 20:23

1 ответ

Если незаконным инструментом является достаточно Ламе для вызова /bin/sh непосредственно, вместо того, чтобы уважать системную установку при помощи /usr/bin/env sh, опции очень ограничены. Я первоначально думал, что Вы будете в состоянии в основном сделать то, что виртуальные среды делают для Python, но после попытки записать сценарий, который сделал так, я не мог обойти прямой вызов /bin/sh ни через какой $PATH волшебство.

  • Прежде, чем назвать инструмент, пересимвольная ссылка sh для избиения, затем отменяют изменение после вызова к инструменту.
  • Еще лучше, измените свое предположение, что Вы не можете отредактировать инструмент. Каков инструмент? Если это - открытый исходный код, который кажется, что этому дают, у Вас есть некоторое знание того, как это работает, разветвите его, измените его, чтобы использовать /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, тогда находить тот перед Вашим путем, который является символьной ссылкой на удар.

0
ответ дан 7 October 2019 в 09:35

Другие вопросы по тегам:

Похожие вопросы: