exec 2>errlog.txt
Если вы используете
bash
(, а неksh93
илиdash
[1] ), это , а не заморозит ваш терминал. Это только предотвратит повторение подсказок оболочки и символов, которые вы вводите.Но вы сможете получить их позже из
errlog.txt
; -)Вы можете легко проверить, набрав вслепуюpwd
илиls
:, команды будут работать нормально и отображать результат. Кроме того, ^C и ^Z будут работать должным образом.Здесь работают две вещи:
1)
bash
всегда выводит приглашение на стандартный вывод, а не на управляющий терминал.2 )библиотека readline, которую bash использует для реализации редактирования командной строки, отключит флаг эха на терминале [2] и сама распечатает символы, введенные пользователем, в stderr.
Если вы запустите оболочку bash с
bash --noediting
(, что приведет к тому, что она не будет использовать библиотеку readline ), введенные вами символы будут возвращены драйвером tty, и только подсказки будут отправлены в перенаправленный stderr..Обходной путь для этого может заключаться в использовании
tee
и подстановке процесса:exec 2> >(trap '' INT; tee errlog.txt >/dev/tty)
[1] см. здесь для объяснения, почему некоторые оболочки будут плохо работать, если вы это сделаете, и почему это будет работать так, как ожидалось в
zsh
.[2] см.
c_lflag
/ECHO
на справочной страницеtermios(3)
и описаниеstty echo
вstty(1)
.
Вам необходимо защитить обратную косую черту от оболочки в командной строке либо с помощью кавычек, либо удвоить их.
myscript.sh
'my_server\/my_repo\/my_image'
..... Or
myscript.sh my_server\\/my_repo\\/my_image