Продолжить вывод на той же строке

27

Хотите сделать фантастический эффект, напечатав [OK] в конце последней строки, когда задача завершена.

Получает следующее:

echo "$0: Starting backup process in '$backupdir'... " 
sleep 3
echo '[OK]'

Я пробовал разные вещи в конце первого эха, в начале второго, например, \r , \c , \ , Googled it ... Нехорошо.

Я хочу, чтобы он выводил это:

./backup.sh: Starting backup process in '/backup'...

... И через 3 секунды добавьте [OK] :

./backup.sh: Starting backup process in '/backup'... [OK]

Спасибо,

    
задан skaffman 30.07.2010 в 16:56
источник
  • Пожалуйста, не используйте эхо, придерживайтесь printf, читайте opengroup.org/onlinepubs/009695399/utilities/echo.html для получения дополнительной информации о том, почему. –  Anders 30.07.2010 в 22:56

3 ответа

47

Используйте опцию -n , чтобы пропустить печать новой строки в конце. Больше ссылок на echo docs .

Итак, вы можете сделать что-то вроде этого:

echo -n "$0: Starting backup process in '$backupdir'... " 
    
ответ дан Johan 30.07.2010 в 16:58
13

используйте более портативный printf

    
ответ дан ghostdog74 30.07.2010 в 17:01
  • Портативный, каким образом? –  Johan 30.07.2010 в 17:09
  • см. здесь: ru.wikipedia.org/wiki/Echo_%28command%29#cite_note-0 –  ghostdog74 30.07.2010 в 17:49
  • Некоторые реализации эха используют флаг -n для подавления новой строки; другие используют \ c в конце строки. Если вы используете один в своем скрипте, а echo ожидает другого, вы получите «-n» перед вашим выходом или «\ c» в конце. Но printf "% s" "$ 0: ..." всегда будет работать так, как ожидалось. –  Gordon Davisson 30.07.2010 в 19:11
  • @Gordon Davisson @ ghostdog74, не могу согласиться больше, даже стандарт POSIX говорит: «Новые приложения рекомендуется использовать printf вместо echo». +1 –  Anders 30.07.2010 в 22:55
  • Интересно. Благодарю. –  Johan 31.07.2010 в 00:36
2

echo -n hello

    
ответ дан ULysses 30.07.2010 в 17:01