Вы вышли из системы и вошли в снова, так как Вы были добавлены к группе A?
В противном случае Ваши текущие процессы входа в систему будут только иметь составы группы, которые это имело во время входа в систему, не любых изменений с тех пор. И любые дочерние процессы того входа в систему будут иметь те же составы группы (т.е. если Вы вошли в X затем каждых приложений включая свой эмулятор терминала и оболочку),
Можно протестировать это путем входа в систему снова на другой консоли или через ssh или что-то как exec sudo -u $(id -u -n) -i
(чтобы эффективно уничтожить и заменить текущую оболочку новой оболочкой - любые фоновые процессы, принадлежащие той оболочке, будут осиротевшими),
Это - общее представление, но Вы могли использовать pv
управляйте для подсчета количества строк, поскольку они проходят и дисплей это на экран. pv
среди он - много переключателей, имеет a -l
переключатель, который считает каждую строку, как это проходит.
Здесь я использую некоторое время цикл для моделирования некоторых файлов от вывода SVN.
$ for i in $(seq 100); do echo "file$i"; sleep 2; done | pv -l -c >/dev/null
3 0:00:05 [0.99/s ] [ <=>
Это будет продолжать перезаписывать выходную строку как это:
18 0:00:36 [ 0/s ] [ <=> ]
24 0:00:47 [0.991/s ] [ <=> ]
yourcommand | { I=0; while read; do printf "$((++I))\r"; done; echo ""; }
Или помещенный раздел на кронштейнах в сценарий оболочки. Обратите внимание, что это только работает, если Ваша оболочка на самом деле поддерживает преинкрементный оператор, как удар или ksh93 или zsh. Иначе необходимо будет увеличить $I
и затем распечатайте его (как в I=$((I+1));printf...
). Кроме того, если printf
не встроенное с Вашей оболочкой (это - встроенное с текущим ударом), Вы могли использовать echo -ne
или print -n
вместо этого для лучшей производительности. Вы просто хотите подавить новую строку и интерпретировать \r как символ ESC.
=
и '=' различия и причуды.:) Почему не был бы они заменять его python-like-syntaxed языком...
– Boris Burkov
06.10.2013, 21:12
printf
концы с a \r
. И что происходит, если Вы делаете echo -ne "$I\r"
или print -n "$I\r"
.:) Я использовал printf
, однако, потому что это принимает значение по умолчанию к не печати новой строки в конце, таким образом, \r
просто пятится к началу. Не все реализации эха поддерживают -e
или -n
аргумент, к сожалению.
– dannysauer
06.10.2013, 22:02
read
кому: read -r
(так как иначе обратная косая черта в конце строки смешала бы с подсчетом). Кстати, с небольшим количеством работы, это может быть адаптировано, чтобы также показать последнюю строку вывода, который может быть полезен для некоторых команд.
– ruakh
07.10.2013, 04:10
Можно выполнить команду в фоне как задание и перенаправить его stdout (и stderr дополнительно) к файлу журнала: command > logfile &
где &
определяет задание (если stderr также, говорят &>
вместо >
).
Затем можно использовать wordcount утилиту для подсчета количества строк в файле журнала с wc -l
.
Для показа изменения состояния в одной динамично изменяющейся строке Вы могли использовать что-то как while true; do echo -en '\r'; wc -l logfile; sleep 1; done
, но я не могу вынудить удар потянуть \r
возврат каретки для уничтожения содержания предыдущей строки.
Посмотрите этот вопрос, это - почти дубликат: https://stackoverflow.com/questions/2388090/how-to-delete-and-replace-last-line-in-the-terminal-using-bash
printf/print/echo
как предложено danny.:) Конечно, он мог использовать less
, но я предполагаю, он может позволить себе сказать wc -l logfile
каждый раз он беспокоится. Я думаю, играя с ncurses
или очистка экрана является излишеством здесь.
– Boris Burkov
06.10.2013, 21:18
echo -e 'r'
команда? Это должно стереть ранее печатное содержание строки, так, чтобы это динамично изменилось, но я не могу вынудить это сделать тот :(
– Boris Burkov
06.10.2013, 21:35