Сценарии совместимости: Сохранить $? для использования позже

Для подстраивания сетевой пропускной способности существуют также инструменты, такие как cstream или mbuffer.

В дополнение к -t num отрегулировать пропускную способность к num байты в секунду, cstream, например, не только имеет a -b num опция установить размер блока, используемый для чтения-записи, но также и a -B num опция буферизовать входной блок до num байты перед записью.

Как альтернатива ssh и rsync Вы могли попробовать nc (netcat) или ncat, особенно, если поток данных не собирается пробегаться через Интернет. ncat часть Проекта Nmap и имеет поддержку SSL все же.

# netcat + tar + cstream example to throttle network throughput
# requires netcat on both servers
# cf. http://superuser.com/questions/291803/best-way-to-copy-millions-of-files-between-2-servers/
# cstream -T 10 -t 4m /dev/null   # test

nc -l -p 2342 | tar -C /target/dir -xzf -                       # destination box
tar -cz /source/dir | cstream -T 30 -t 4m | nc Target_Box 2342  # source box

3
16.01.2015, 23:46
2 ответа

Используйте perl:

perl -e '$a=shift; `<< other code >>`; exit $a' $? # Fails in csh

Edit Это работает и на csh (и zsh, tcsh, sh, pdksh, ksh93 - хотя и не рыба):

perl -e '$a=shift; `<< other code >>`; $a=~s/h// and exit $a; exit shift' "$?h" "$status"
0
27.01.2020, 21:42

Этот ответ работает в бэш-подобных оболочках и csh-подобных оболочках, и он не требует perl:

sh -c '<< other code >>; [ "$0" != "" ] && exit "$0"; exit "$1"' "$?" "$status"

или можно добавить фиктивный параметр:

sh -c '<< other code >>; [ "$1" != "" ] && exit "$1"; exit "$2"' foo "$?" "$status"

, а тест можно изменить на [ ! -z "$0" ] (или "$1").  Я не знаю, будет ли он работать в zsh или в fish.  Каждая знакомая мне оболочка будет оценивать $? и $статус. при разборе команды и передать их в качестве параметров команде sh -c.  Оболочка sh назначает их последним двум позиционным параметрам.  Когда "другой код" заканчивается, оболочка проверяет позиционный параметр. который получил свое значение от $? , чтобы посмотреть, является ли он нулевым или нет, и выйти с соответствующим значением позиционного параметра.

Это будет неудачным, если окружающая оболочка использует нечто иное, чем $? или $status. чтобы удержать статус выхода.  Она также не будет работать, если оболочка позволяет установить $?. (ненулевая), если это не статус выхода, или если $? является недействительной последовательностью символов. что приводит к отклонению всей команды как синтаксической ошибке.

0
27.01.2020, 21:42

Теги

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