Как предотвратить замену \ r на \ n

С bash это можно сделать следующим образом:

#!/usr/bin/bash

set -e
set -u

[ -v HOME ] && exec -c "$0" "$@"

# continue with the rest of the script
# e.g. print the cleaned environment:
export

set -e и Команды set -u не являются строго необходимыми, но я включаю их, чтобы продемонстрировать, что этот подход не полагается на доступ к неустановленным переменным (как, например, ["$ HOME"! = ""] ) и совместим с параметром set -e .

Тестирование переменной HOME должно быть безопасным, потому что bash выполняет сценарии в неинтерактивном режиме, то есть файлы конфигурации, такие как ~ / .bashrc (где могут быть установлены переменные среды), не являются получен во время запуска.

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

declare -x OLDPWD
declare -x PWD="/home/juser"
declare -x SHLVL="1"
0
08.04.2019, 23:04
1 ответ

tail— это , а не , замена \rна \n.

Это ваша mpvпрограмма, которая корректирует свой вывод состояния в зависимости от того, является ли ее stderr терминалом.

Тривиальный тест на то, что tailне заменяет \rна\n:

$ nohup sh -c 'while printf "s=$((s=s+1))\r"; do sleep 1; done' &
[1] 3897
$ nohup: ignoring input and appending output to 'nohup.out'

$ tail -f nohup.out
s=8  # s=9, s=10... on the same line

Точно так же, как его родитель mplayer, mpvвесьма раздражителен, когда кто-то пытается запустить его способом, отличным от того, как его представляли его авторы; Мне не удалось найти какой-либо вариант, чтобы заставить его печатать свой статус так же, как на терминале, когда его stderr является обычным файлом или каналом. Самое простое, что вы можете сделать, это запустить его в отдельном окне screen/tmux, а не с nohup.

2
28.01.2020, 02:30

Теги

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