Посмотрите на tsocks
приложение, это может прозрачно перенаправить каждый сетевой запрос управляемого приложения через данный прокси носков.
Причиной, почему это не работает автоматический ATOW, является известная ошибка удара, которая предотвращает переменные типа массив экспорта (см. ошибки раздела в странице справочника). К сожалению, DIRSTACK является переменной типа массив.
Я создал замены для pushd/popd/dirs, которые переносят их, но хранят их материал в скалярной переменной, так, чтобы дочерние процессы знали о нем.
Если Вы будете получать код ниже и будете использовать mypushd/mypopd/mydirs вместо оригиналов, то дочерние процессы будут помнить стопку своих родителей. Заметьте, что это не будет работать с каталогами, имя которых включает двоеточие!
Предупредите меня при определении какой-либо ошибки потому что я просто записал это. Кроме того, если Вы знаете о более простой альтернативе, совместно используйте!
export SCALARDIRSTACK
export DIRSTACK
update_dirstack()
{
if [ ! -z "$SCALARDIRSTACK" ]; then
dirs -c
# get an array from scalardirstack
IFS=':' read -a tmp <<< "$SCALARDIRSTACK"
# traverse in reverse order to pushd stuff into the stack
for (( idx=${#tmp[@]}-1 ; idx>=0 ; idx-- )) ; do
# gotta use pushd/popd this to manipulate DIRSTACK
pushd -n ${tmp[idx]} > /dev/null
done
fi
}
update_scalardirstack()
{
if [ ${#DIRSTACK[@]} -gt 1 ]; then
SCALARDIRSTACK=$(printf '%q:' ${DIRSTACK[@]:1}) # string from array
else
SCALARDIRSTACK=""
fi
}
scalar_dstack_wrap()
{
update_dirstack
$@
update_scalardirstack
}
alias mydirs='scalar_dstack_wrap dirs'
alias mypushd='scalar_dstack_wrap pushd'
alias mypopd='scalar_dstack_wrap popd'