Это - классическое состояние состязания, таким образом, результат непредсказуем по определению.
Среди других это зависит от
fopen(3)
или open(2)
режимы записи,Если необходимо смочь считать файл, в то время как он переписывается, то можно заставить устройство записи сделать переходную копию файла, изменить это, то скопируйте его назад в исходный файл. Это путь rsync
делает это, например. Существует много способов реализовать это, но никакой бесплатный ланч. Каждый метод имеет свои собственные недостатки и последствия.
Часто времена, когда в терминале Unix/Linux (Bash), например, Вы будете использовать команды more
или less
или cat
просмотреть файл. Когда Вы делаете это и файл не предназначены, чтобы быть просмотренными (такой как /bin/ls
) Вы будете произведены как это:
Что продолжается, вот то, что Вы просто попытались просмотреть файл, это - программа. Исполняемый файл, которые не предназначены, чтобы быть просмотренными со стандартными средствами просмотра, поскольку я упомянул выше.
Для устранения этой проблемы, можно сделать следующее:
reset
и возврат хитаЭто должно обычно откладывать Ваш терминал в более нормальный режим. Я упомяну еще одну вещь, когда Вы сделаете шаги выше, Вы будете путем ввода их слепой в терминал. Поэтому просто удостоверьтесь, что Вы вводите его правильно.
Как предложено в комментариях @sendmoreinfo у Вас могла бы быть лучшая удача с помощью следующих команд вместо этого, если вышеупомянутое не работает:
$ stty sane
$ tput rs1
Кстати, если Вы сталкиваетесь с файлом и не уверены, собирается ли он испортить Ваш терминал, можно осмотреть файл с помощью команды file
который сообщит тип файла, это.
Например, с /bin/ls
тот файл показывает следующий вывод:
$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
У меня был случай, когда ни один из обычных приемов, reset
или stty sane
, не работал (после случайного вызова print
в массиве байтов python). Я добился успеха с методом 2, перечисленным в этом полезном блоге .
С тех пор я создал очень полезный псевдоним:
alias fix='echo -e "\033c"'
Ни один предыдущий ответ не помог мне. Но, похоже, это сработало в .bashrc add:
alias fix='reset; stty sane; tput rs1; clear; echo -e "\033c"'
, а затем, когда возникнет проблема, введите это (даже если вы, вероятно, этого не видите!)
(ctl-c, ctl-c, ctl-c)
fix
Большое спасибо предыдущим отправителям. Кроме того, в качестве примечания, причина того, что ваш терминал не работает при отображении этих исполняемых файлов (или хранилищ ключей и т. Д.), Заключается в том, что эти файлы часто содержат двоичные последовательности, которые являются управляющими кодами. Управляющие коды могут выполнять случайные действия, например переключаться на набор графических символов, устанавливать одинаковые цвета переднего плана и фона и т. Д.
У меня почти такой же псевдоним, как и в предыдущем сообщении, с одним небольшим изменением ( tput reset
вместо rs1
) и одна добавленная команда ( setterm -reset
):
alias clr='echo -e "\033c" ; stty sane; setterm -reset; reset; tput reset; clear'
Пользователи tmux
могут отправлять все эти команды в свою оболочку, но сброс не переходит на панель tmux
.
Создать новое окно tmux:
ctrl-B c
панели списка tmux
Обратите внимание на номер панели, который, по вашему мнению, не работает, обычно 0
. Давайте назовем его PPP
Выберите окно tmux, где XXX
— номер окна, которое борется, не обязательно совпадает с номером панели.
ctrl-B XXX
tmux send-key -R -t PPP
Затем вы увидите все команды в других ответах на этот вопрос, которые попали в вашу оболочку, но не сработали! Возможно слепой tmux send-key -R -t PPP
сработает, но проверить не могу.
В дополнение к другим ответам на вопросы о том, как сбросить настройки терминала, я полагал, что повреждения нельзя избежать, если не будут должным образом защищены. Поэтому я лучше отправлю вывод в простой текстовый -дружественный конвертерcat -v
:
docker logs myjenkinscontainer 2>&1 | cat -v
Просмотр и редактирование двоичных файлов возможно с помощью hexdump -C
иvi -R
(:%!xxd -g1
для шестнадцатеричного представления и :%!xxd -g1 -r
для сохранения шестнадцатеричных изменений ).
Я знаю, что это было здесь некоторое время, но, хотя многие другие ответы сработали для меня, reset, stty sane, иногда ни один из них не работал для меня, и я всегда прибегаю к:
echo ^v^o
Это эхо Ctrl+V, за которым следует Ctrl+O
reset
не 100%-е средство исправления для терминального безумия. Попробоватьstty sane
сопровождаемыйtput rs1
. – sendmoreinfo 17.06.2013, 17:22stty sane
но никогдаtput
. – slm♦ 17.06.2013, 18:01reset
работавший в моем случае – code_monk 08.03.2015, 16:06clear
также работы для умеренных случаев. – Navin 02.11.2015, 07:41