Они игнорируются, потому что их нет, но это не имеет значения - исходные (на английском) описания находятся в различных пакетах
файлы ( например для jessie / main
).
Вы можете запустить процесс, который выполняет какой-то вывод в фоновом режиме, и убить его, как только будет выполнен 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
, и пока она не завершится, я повторять загрузку ответа каждую минуту.
Для этого я использую СЕКУНД
в 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