Покажите вывод на другом “экране” и возвратитесь к нормальному при выполнении

Расширение фигурной скобки не разворачивает переменные, потому что расширение фигурной скобки является самым первым шагом расширения оболочки, и переменные расширены позже.

Из страницы справочника удара:

Расширение фигурной скобки выполняется, прежде чем любые другие расширения и любые символы, особенные для других расширений, сохраняются в результате. Это является строго текстовым. Bash не применяет синтаксической интерпретации к контексту расширения или текста между фигурными скобками.

Так:

NUM=4
for i in {1..$NUM}
do
    echo $i
done

печать

{1..4}
7
30.12.2011, 03:31
4 ответа

Если Ваш эмулятор терминала поддерживает его, можно сделать это использование того же механизма, используемого less, vim, и др., а именно, ti и te возможности termcap (smcup и rmcup в более современном terminfo). Они переключаются от основного устройства до вторичного экрана, и назад к основному устройству, соответственно.

Если Ваша система имеет tput команда, можно использовать:

tput smcup # switch to secondary screen
...
tput rmcup # switch back to primary screen

Иначе, для xterm, и вероятно для большинства других эмуляторов терминала, этого:

printf '\e[7\e[?47h'

должен переключиться на вторичный экран и это:

printf '\e[2J\e[?47l\e8'

должен переключиться назад на основное устройство (и отложить курсор, где это было).

tcsh имеет встроенное echotc команда, таким образом, Вы могли сделать:

tcsh -c 'echotc ti'
...
tcsh -c 'echotc te'

(или просто используйте echotc непосредственно, если Вы, оказывается, используете tcsh).

8
27.01.2020, 20:16
  • 1
    tput smcup и tput rmcup кажется, делает задание. –  Tyilo 01.01.2012, 15:37
  • 2
    Если Вы идете в твердый код коды вместо использования tput, попробуйте современное 1049 вместо 47. Это было представлено Xterm и поддерживается некоторыми другими эмуляторами терминала. Это очищает альтернативный экран при переключении на него и оставляет содержание на месте при переключении назад (таким образом, можно просматривать/копировать содержание после того, как полноэкранная программа вышла). –  Chris Page 05.01.2012, 11:01
  • 3
    Для устойчивости, если Ваш язык сценариев поддерживает его, расположение для переключения на основной дисплей, даже если программа выходит преждевременно. В сценарии Bash, например, Вы могли установить обработчик сигналов с trap 'tput rmcup' EXIT. –  Chris Page 05.01.2012, 11:05

Это называют “альтернативным экраном” (и как topхиты Googleшоу , Вы необычны в симпатии этой функции). Некоторые терминалы поддерживают два экранных буфера, один используемый полноэкранными приложениями, другой используемый ориентированными на строку приложениями. Bash ничего не знает о них. Если команда просто испускает вывод к терминалу, можно использовать терминальные управляющие последовательности для переключения на вторичный экран, и назад (эти команды документируются в xterm ctlseqs).

printf '\e[?47h'; mycommand; printf '\e[?47l'

Обратите внимание, что нет никакого scrollback для альтернативного экрана, таким образом, Вы будете только видеть последний экранный из вывода. Если это - проблема, просто сделайте простую вещь:

mycommand | less 

Существует только два экранных буфера. Если Вы хотите больше, используйте надлежащий экранный мультиплексор, такой как Screen или Tmux.

3
27.01.2020, 20:16
  • 1
    , я удивлен видеть, насколько не понравившийся это. Мне действительно нравится способность выполнить редактора и все еще видеть мою историю команд, когда я сделан. –  Keith Thompson 30.12.2011, 10:51
  • 2
    Будут пустые строки, оставленные после выполнения этого в моем термине: cl.ly/Cz4N cl.ly/Cznp –  Tyilo 01.01.2012, 15:35

Bash ничего не знает об экранах (он может работать без того, чтобы быть замеченным, на самом деле). Можно перенаправить и стандартный вывод и стандартную погрешность в любой файл или канал, все же.

0
27.01.2020, 20:16

Ни один из текущих ответов, казалось, не работал над моей машиной, но я узнал о названной команде screen, который, кажется, добивается цели для меня.

0
27.01.2020, 20:16
  • 1
    Не совсем то же самое, но если это удовлетворяет целям... Какой эмулятор терминала то, как использование? Я думаю xterm имеет опцию к (en|dis) способный те управляющие последовательности; другие, вероятно, делают также. –  Keith Thompson 31.12.2011, 05:53
  • 2
    я использую iTerm 2 для OS X. –  Tyilo 31.12.2011, 05:55

Теги

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