Как сделать удар помещенной подсказкой на новой строке после команды кошки?

дать source ~/.my_zsh_functions/functions1 в терминале и оценивании my_function, теперь Вы сможете вызвать функцию

18
06.01.2013, 23:12
5 ответов

Большинство инструментов Unix разработано для работы хорошо с текстовыми файлами. Текстовый файл состоит из последовательности строк. Строка состоит из последовательности печатаемых символов, заканчивающихся символом новой строки. В частности, последний знак непустого текстового файла всегда является символом новой строки. Очевидно, example.txt содержит только some text без заключительной новой строки, таким образом, это не текстовый файл.

cat делает простое задание; превращение произвольных файлов в текстовые файлы не является частью того задания. Некоторые другие инструменты всегда превращают свой вход в текстовые файлы; если Вы не уверены файл, Вы отображаете концы с новой строкой, пытаетесь работать awk 1 вместо cat.

Можно заставить удар отобразить свою подсказку на следующей строке, если предыдущая команда оставила курсор где-нибудь кроме последнего поля. Вставьте это Ваш .bashrc (изменение GetFree предложения Dennis Williamson):

shopt -s promptvars
PS1='$(printf "%$((COLUMNS-1))s\r")'$PS1
16
27.01.2020, 19:45
  • 1
    много за рабочее решение и сжатое объяснение! Я понимаю, что это - слишком для бедных cat, таким образом, я сохраню это как последнее прибежище в течение времени, когда эта проблема начнет беспокоить меня снова. –  Stanislav Shabalin 07.01.2013, 00:46
  • 2
    Так как это - предпочтение удара, оно может повредить команды передачи по каналу? –  Stanislav Shabalin 07.01.2013, 00:51
  • 3
    @StanislavShabalin Это не влияет на передачу по каналу, только подсказку. –  Gilles 'SO- stop being evil' 07.01.2013, 00:52
  • 4
    я должен удалить"-1" после "СТОЛБЦОВ" для этого для работы правильно. –  rafak 05.05.2013, 09:23
  • 5
    Это решение заставляет подсказку перемещаться, когда окно терминала изменено. Я нашел, что для создания этой работы надежно я должен был вложить текущий столбец PROMPT_COMMAND и, если это не 0, используйте новую строку (\n) как первый символ PS1. –  Brian Donovan 25.08.2014, 21:03

Проблема с этим могла состоять в том, что Ваш example.txt не имеет новой строки в конце Вашего файла.

4
27.01.2020, 19:45
  • 1
    Вещь, я не забочусь, имеет ли файл новую строку в конце или нет. Я хочу смочь видеть, что кошка производит более ясный и не это разрушительное :-) И я понимаю, что это не catзадание так, вероятно, я ищу некоторое обходное решение. спасибо –  Stanislav Shabalin 07.01.2013, 00:38
  • 2
    Это - такой не, отвечают example.txt наличие новой строки в конце файла является смыслом вопроса. –  Willem D'Haeseleer 02.11.2015, 07:24

Если Вы настаиваете на том, чтобы использовать cat, это работает на оба типа файлов, с и без новой строки в конце:

echo "`cat example.txt`"

Можно превратить его в функцию с именем по Вашему выбору (даже cat) в Вашем .bashrc:

cat1(){ echo "`/bin/cat $@`";}
2
27.01.2020, 19:45
  • 1
    Теперь это немного слишком много, даже если это работает ;-) Спасибо, хотя! –  Stanislav Shabalin 07.01.2013, 00:48

Я начал использовать ответ @Gilles, но обнаружил, что если терминал изменит количество столбцов, то приглашение уже не будет в начале строки, как ожидалось. Это может произойти по разным причинам, включая tmux/screen splits, ручное изменение размера GUI-контейнера, изменение шрифта и т.д.

Что мне действительно нужно, так это что-то, что добавит новую строку, если терминал начнет печатать запрос не в первом столбце. Для этого мне нужно было выяснить, как получить текущий столбец, для чего я использовал этот ответ . Окончательная настройка подсказки работы находится ниже:

###
# Configure PS1 by using the old value but ensuring it starts on a new line.
###
__configure_prompt() {
  PS1=""

  if [ "$(__get_terminal_column)" != 0 ]; then
    PS1="\n"
  fi

  PS1+="$PS1_WITHOUT_PREPENDED_NEWLINE"
}

###
# Get the current terminal column value.
#
# From https://stackoverflow.com/a/2575525/549363.
###
__get_terminal_column() {
  exec < /dev/tty
  local oldstty=$(stty -g)
  stty raw -echo min 0
  echo -en "\033[6n" > /dev/tty
  local pos
  IFS=';' read -r -d R -a pos
  stty $oldstty
  echo "$((${pos[1]} - 1))"
}

# Save the current PS1 for later.
PS1_WITHOUT_PREPENDED_NEWLINE="$PS1"

# Use our prompt configuration function, preserving whatever existing
# PROMPT_COMMAND might be configured.
PROMPT_COMMAND="__configure_prompt;$PROMPT_COMMAND"
7
27.01.2020, 19:45

установите статические маршруты в маршрутизаторе (192.168.1.1).

# ip route add 192.168.1.160/27 via 192.168.1.9 dev < wlan iface>

или через webui.

добавить iptables пересылать маршруты на хосте с маршрутизатора на 192,168,1,160/27 и наоборот (хотя, я думаю, libvirt уже предоставляет эти правила).

-121--42145-

Обычно это ваш личный пароль для входа в систему. Например:

derek$ sudo ls /var/log/secret
[sudo] password for derek: <type derek's login password> 
audit.log  audit.log.1  audit.log.2

Это может быть изменено файлами политики, такими как/etc/sudoers. См., например, Набор пароля sudo отличается от входа в систему

-121--151826-

Я предпочитаю следующий метод...

cat example.txt ; echo

При этом не вычисляется содержимое example.txt или иногда добавляется новая строка. Это просто перекликается с новой линией, как только кошка сделана, легко запомнить, и никто не думает о том, используют ли они сильные или слабые цитаты правильно.

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

11
27.01.2020, 19:45

Теги

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