Как я могу напечатать некоторую строку до завершения команды?

Я использую скрипт bash для загрузки большого файла с клиентского устройства на веб-сервер.

Но так как потребуется много времени, nginx вернет тайм-аут шлюза. То, что я планирую сделать, – передать stdout сценария bash на подпроцесс python и отправить его как ответ. Поскольку scp не будет выводить какой-либо вывод в stdout, мне нужно каждую минуту отправлять ответы, пока команда scp не scp .

Есть ли способ достичь этого, используя скрипт bash?

Также я не могу увеличить тайм-аут Nginx, так как он обычно занимает более 20 минут

  • копировать файлы удаленно на одном пути
  • scp alias для удаления двоеточий / специальных символов
  • Как различать SSH и SCP для QoS в OpenWRT (и других системах)?
  • Запретить обработку файла до завершения передачи по протоколу SCP
  • Передача файлов с помощью SSH и переключателя
  • Shell Script - как scp на удаленный сервер и загружать файлы и защищать пароль
  • scp и сжимать одновременно, без промежуточного сохранения
  • Укажите имя пользователя при использовании vim с scp
  • 3 Solutions collect form web for “Как я могу напечатать некоторую строку до завершения команды?”

    Вы можете создать процесс, который выполняет некоторый вывод в фоновом режиме, и убить его после выполнения scp :

     (while sleep 60; do echo downloading; done) & PID=$! scp "$1" "$2" kill $PID 

    Вот более общая функция для загрузки и ожидания:

     #! /bin/bash # Wait for process end and show seconds count down # Arg1: PID # Arg2: Expected seconds # Arg3: (optional): dump file # Arg4: (optional): expected file size in bytes function waitpid() { [ -n "$3" ] && touch "$3" local COUNT=$(( $2*10 )) while [ -e /proc/$1 ]; do if [ $(( COUNT%10 )) -eq 0 ]; then echo -en "\r$(( COUNT/10 )) sec" if [ -n "$3" ]; then bytes=$( stat --format=%s $3 ) echo -n " $bytes bytes " if [ -n "$4" ]; then echo -n "$(( $bytes*100/$4 ))% " fi fi fi echo -en ".\e[K" sleep 0.1 [ $COUNT -gt 0 ] && COUNT=$(( COUNT-1 )) done echo } echo "Example 1: Wait for process to be finished" sleep 10 & waitpid $! 10 echo "Example 2: Wait and show file size" for N in {1..5} ; do echo "BAR $N" >> /tmp/foo ; sleep 2 ; done & waitpid $! 10 /tmp/foo 

    Пример вывода:

     Example 1: Wait for process to be finished 3 sec........ Example 2: Wait and show file size 7 sec 160 bytes ....... 

    Изменить: если слишком сложно использовать короткую версию:

     sleep 10 & while [ -e /proc/$! ]; do echo -n . ; sleep 1 ; done 

    Скриншот:

     $ sleep 10 & [1] 5432 $ while [ -e /proc/$! ]; do echo -n . ; sleep 1 ; done ..........[1]+ Done sleep 10 

    ОК, я, наконец, сделал это, я передаю аргументы $1 и $2 для scp , здесь я получаю идентификатор процесса команды scp и до тех пор, пока он не закончится. Я повторяю загрузку ответов каждую минуту. Для этого я использую SECONDS в bash

     t=$SECONDS scp $1 $2 & PROC_ID=$! while kill -0 "$PROC_ID" >/dev/null 2>&1; do n=$(( SECONDS-t)) if (( n > 60 )); then echo downloading t=$SECONDS fi done 
    Interesting Posts

    / proc / version показывает версию gcc, но я не могу найти двоичный файл

    понять варианты «уведомлять-отправить»,

    Настройка RAID на работающем сервере Ubuntu 14.04

    Список файлов другого формата при поиске определенного шаблона имени

    vi – как добавить определенные символы в конце строки

    Tmux Split Panes в том же окне

    Как сделать netstat, который будет фильтровать только на основе pid

    rsync продолжает отсоединяться: сломанная труба

    Внешний диск – как обеспечить читаемость всеми без необходимости корневых перм?

    Использование MPI с .sh скриптом?

    Удалил папку Windows.old, и теперь, когда я запускаю свой компьютер, GRUB больше не видит окна

    Список пакетов с установленными вручную уровнями без их зависимостей

    Имеет ли смысл иметь отдельные объемы ubi для безопасности с ubifs?

    Как PXE загружает установку IPCop?

    Получить файлы с именем, содержащим значение даты, меньшее или равное заданной дате ввода

    Linux и Unix - лучшая ОС в мире.