удар - наследовал стопку каталога в детях

Посмотрите на tsocks приложение, это может прозрачно перенаправить каждый сетевой запрос управляемого приложения через данный прокси носков.

2
09.09.2013, 16:10
1 ответ

Причиной, почему это не работает автоматический 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'
1
27.01.2020, 22:23
  • 1
    назад окружает совместимость в стороне, есть ли что-нибудь препятствующее один использовать массив (и таким образом избавиться от проблемы разделителя (двоеточие в этом случае)? –  peterph 09.09.2013, 23:13
  • 2
    @peterph: причина скалярного обходного решения очевидна в моем комментарии для исходного вопроса, но я обновил ответ для отражения его также, так, чтобы это было сам содержавшее –  ricab 10.09.2013, 11:46

Теги

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