Препятствуйте тому, чтобы терминал отобразил ранее выполняемую команду

Похож на Ваш вопрос, "Как перечислить файлы шаблоном, исключая каталоги с ls только".

Нет никакого способа сделать это с чистым ls. Можно объединиться ls + grep как:

ls -ld *2010* | grep -v '^d'

Однако намного лучше использовать find для этого:

find . -maxdepth 1 -type f -name "*2010*"
7
17.12.2013, 13:36
4 ответа

Вы могли попытаться перезаписать предыдущую строку, которой уже ответили;

Как изменить содержание строки на терминале в противоположность записи новой?

Например (измененный из исходного ответа):

prompt% echo -n "Old line"; echo "\033[1A\033[1A" "new line"

Отобразится только:

prompt% new line

Как вывод. Добавление больше \033 [последовательности на 1 А удаляет больше строк.

Протест: Это не работает над всеми терминалами.

4
27.01.2020, 20:14
  • 1
    Мой сценарий ничего не производит. Я хочу удалить фактическую команду из экрана, не это производится. –  whonoes 17.12.2013, 13:41
  • 2
    Да, это перезапишет последнюю выходную строку сценария; с Вашим примером я хотел бы за prompt% echo -n "Old line"; echo -e "\e[0K\r new line" к dissapear от терминала. –  whonoes 17.12.2013, 14:08
  • 3
    Вы правы, я обновил свой ответ с корректной терминальной последовательностью. –  jmetz 17.12.2013, 14:13
  • 4
    mutzmatron, это решает мою проблему. Один протест состоял бы в том, что, если строка я передаю сценарию, имеет больше чем одну строку (текст переносится в терминале), только последний будет удален. При добавлении больше \033 [работали бы последовательности на 1 А, но затем если я добавляю строку со всего одной строкой, больше чем одна строка будет удалена из терминала. Однако, достаточно хороший для моего случая, я приму Ваш ответ, Спасибо! –  whonoes 17.12.2013, 15:00
  • 5
    я просто отправил ответ, который я составлял, и Вы побеждаете меня к нему. Мое собственное использование решения tput, не терминальные директивы, таким образом, это более портативно через терминалы. Это работает с многострочным выводом, также — но это повреждается, если вывод прокручивает много. –  Alexios 17.12.2013, 15:45

Вместо того, чтобы иметь команду для ввода мысли Вы могли определить виджет для этого. В zsh:

thought() { 
  print -r -- $BUFFER >> ~/.thoughts
  # or: your-script $BUFFER
  BUFFER=
  zle -M 'thought recorded'
}
zle -N thought
bindkey '^T' thought

Затем нажмите Ctrl-T для добавления содержания буфера к Вашему ~/.thoughts файл и ясный это впоследствии (BUFFER=). Затем Вы не должны волноваться о заключении в кавычки.

Другой подход мог быть должен использовать интерактивные комментарии:

setopt interactive_comments
alias '@=:;#'
preexec() {
  [[ $1 = @* ]] && {
    print -r -- ${1#* } >> ~/.thoughts
    # or: your-script ${1#* }
    echoti cuu1
  }
}

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

7
27.01.2020, 20:14
  • 1
    Разве это не обходит вопрос...? –  jmetz 17.12.2013, 14:47
  • 2
    Спасибо Stephane, но у меня уже есть рабочий сценарий (Python), который делает немного больше, чем вход строк. Ваше решение означает, что я должен повредить все, и это является немного замысловатым для моего простого случая :) Ответ Mutzmatron решил мою проблему. –  whonoes 17.12.2013, 15:05
  • 3
    I upvoted этот ответ после регистрации шахты, потому что я думаю, что это менее топорно, чем терминальный взлом. Но там не составляет вкус! –  Alexios 17.12.2013, 15:44
  • 4
    @whonoes, просто добавьте вызов к "Вашему-сценарию" там, print >> ~/.thoughts был просто пример так, чтобы кто-либо мог протестировать его. –  Stéphane Chazelas 17.12.2013, 16:39
  • 5
    @stephane, это действительно - более изящное решение; я просто хочу решить все в своем сценарии (который слишком прост, чтобы иметь виджет как зависимость, когда я могу избежать, чтобы, даже путем использования терминального взлома) –  whonoes 20.12.2013, 10:44

Предупреждение, это - ужасный, ужасный взлом (но затем, весь запрос является определенным взломом).:)

Вот что-то, что это будет работать над большинством терминалов, включая braindead MS-DOS эмулятор ‘ANSI.SYS’. Не будет работать над простыми терминалами, конечно (но ничто не будет):

tput sc
echo "This will be hidden."
sleep 5
tput rc; tput cuu 1; tput ed

Очевидно, это - пример. Избавьтесь от echo и sleep и замените его своей командой. Вот то, как это работает:

  • tput sc сохраняет текущие координаты курсора на экране,
  • tput rc кладет обратно курсор к сохраненным координатам. Теперь, экран, возможно, прокрутил, таким образом, чувствительный материал будет на строке выше сохраненной. Так,
  • tput cuu 1 перемещает курсор одна строка. (если Вы чувствуете себя особенно параноиками, не стесняйтесь увеличивать число.
  • Наконец, tput ed очищается в конец экрана (т.е. очищается от курсора в конец строки, затем от курсора до нижней части экрана).

Это перестанет работать комично, если экран прокрутит много потому что sc не знает о прокрутке, просто экранирует координаты.

tput терминальный агностик, таким образом, это будет работать, пока Ваш конкретный терминал перечислен в terminfo базе данных и TERM переменная правильно установлена.

6
27.01.2020, 20:14
  • 1
    Upvoted для мобильности - работает отлично действительно! –  whonoes 20.12.2013, 10:39

Ну, если это справедливо some random thought вместо фактической команды, затем можно сделать так путем добавления space перед thought. Это исключит эту команду из вхождения в историю

satish@Satish:/tmp $ echo "I'm in history"
I'm in history
satish@Satish:/tmp $  echo "I'm not"
I'm not
satish@Satish:/tmp $ history | tail -n 3
 1887  sudo su -
 1888  echo "I'm in history"
 1889  history | tail -n 3
satish@Satish:/tmp $ 
0
27.01.2020, 20:14
  • 1
    OP хочет, чтобы команда не присутствовала в терминале, не истории. –  jmetz 17.12.2013, 13:47
  • 2
    Как упомянуто в вопросе, история не является проблемой, я могу управлять этим. С Вашим примером я хотел бы эту строку satish@Satish:/tmp $ echo "I'm not" быть скрытым от терминала после того, как я выполняю его. –  whonoes 17.12.2013, 14:09
  • 3
    Да... Я получил его.... будет видеть, могу ли я найти решение для этого. И затем отправит здесь :) –  SHW 17.12.2013, 14:19

Теги

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