Настройка вывода переменной из тайм-аута

Согласно плакату, следующая команда работает

apt-get -o Debug::pkgProblemResolver=true install click click-dev gir1.2-click-0.4 libclick-0.4-0

и дает результат

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Starting pkgProblemResolver with broken count: 0
Starting 2 pkgProblemResolver with broken count: 0
Done
The following extra packages will be installed:
  python3-click-package
Suggested packages:
  ubuntu-app-launch-tools upstart-app-launch-tools
Recommended packages:
  debootstrap
The following packages will be REMOVED:
  python3-click
The following NEW packages will be installed:
  python3-click-package
The following packages will be upgraded:
  click click-dev gir1.2-click-0.4 libclick-0.4-0
4 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
Need to get 146 kB of archives.
After this operation, 1,024 B of additional disk space will be used.
Do you want to continue? [Y/n]

Таким образом, никаких проблем при запуске явного apt-get install .

Я попросил автора запустить его без флага отладки, чтобы посмотреть, дает ли он такие же результаты, но, по-видимому, он уже запускал отладочную версию.

8
26.03.2019, 21:11
4 ответа

Используя тот же подход, что и вы, используя временный файл, но делая его немного короче:

showqueue >/tmp/q.out; head -n 20 /tmp/q.out; echo '...'; tail -n 20 /tmp/q.out

Это не будет страдать от тех же проблем, которые обсуждались в другом ответе , но может отображать одни и те же строки дважды, если вывод был короче 40 строк.

2
27.01.2020, 20:09

решение awk для произвольного количества строк, показанных с начала и с конца (измените n=3, чтобы установить количество):

$ seq 99999 | awk -v n=3 'NR <= n; NR > n { a[NR] = $0; delete a[NR-n]; } 
     END { print "..."; for (i = NR-n+1; i <= NR; i++) if (i in a) print a[i]; }'
1
2
3
...
99997
99998
99999

Как написано, начальная и конечная части не будут не перекрываться, даже если ввод короче 2*nстрок.

В некоторых реализациях awk также работает использование for (x in a) print a[x];в части END. Но в целом не гарантируется возврат записей массива в правильном порядке и, например,. мямлить.

2
27.01.2020, 20:09

Вы можете использовать простой скрипт awk. Добавлен круговой буфер, где n=3 для последних 3 строк

awk 'NR<=n {print $0} { A[NR%n]=$0 } END { for (i=1; i<=n; ++i) if (NR+i>2*n)print A[(NR+i)%n] }' n=3 < <( seq 10 )

После обновления это уже не просто,

0
27.01.2020, 20:09

Вы хотите сделать что-то вроде следующего? Показывает вывод как из головы, так и из хвоста.

$ showqueue | (head && tail)
14
27.01.2020, 20:09

Теги

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