Для подстраивания сетевой пропускной способности существуют также инструменты, такие как 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
Используйте 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"
Этот ответ работает в бэш-подобных оболочках и 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
.
чтобы удержать статус выхода. Она также не будет работать, если оболочка позволяет установить $?
.
(ненулевая), если это не статус выхода, или если $?
является недействительной последовательностью символов.
что приводит к отклонению всей команды как синтаксической ошибке.