Экранирование косой черты в аргументе скрипта bash для замены sed

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).

0
04.05.2021, 02:26
1 ответ

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

myscript.sh 
'my_server\/my_repo\/my_image'
..... Or
myscript.sh my_server\\/my_repo\\/my_image
1
28.07.2021, 11:35

Теги

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