Не используйте bash для интерпретации \ в строке с двойными кавычками

TCP-оболочки выходят из моды. Веб-серверы (Apache и другие )могут нуждаться в компиляции с поддержкой оболочек TCP. Apache и Nginx имеют свои собственные методы и модули, которые обычно используются.

Веб-сервер Nginx также не поддерживает обёртки TCP, но по этому адресу есть модуль для их поддержки :https://github.com/sjinks/ngx_tcpwrappers. Это также требует компиляции из исходного кода и имеет серьезные ограничения.

It should be noted that TCP Wrappers have several peculiarities you should know about:

the most disappointing thing is that libwrap (library implementing TCP Wrappers functionality) is not a thread safe library. In other words, if two threads try to simultaneously use libwrap, the results could be weird. This is because libwrap uses non-reentrant functions like strtok(), gethostbyname(), gethostbyaddr() etc. If nginx is built with threading support (does it work yet?), use of libwrap can lead to performance penalties (because access to libwrap functions will have to be serialized). If nginx is configured without threading support (this is the default for Linux), everything is OK.
dynamic ACL configuration comes at a price: libwrap will read and parse /etc/hosts.allow and /etc/hosts.deny on every request; this may be an issue for high-loaded projects.

Таким образом, использование tcpwrappers нецелесообразно.

-1
22.01.2021, 17:07
2 ответа

Чтобы встроенная команда bash's echoвыводила заданную строку дословно, за которой следовал символ новой строки, вам нужно:

# switch from PWB/USG/XPG/SYSV-style of echo to BSD/Unix-V8-style of echo
# where -n/-e options are recognised and backslash sequences not enabled by
# default
shopt -u xpg_echo

# Use -n (skip adding a newline) with $'\n' (add a newline by hand) to make
# sure the contents of `$VAR` is not treated  as an option if it starts with -
echo -n "$VAR"$'\n'

Или:

# disable POSIX mode so options are recognised even if xpg_echo is also on:
set +o posix

# use -E to disable escape processing, and we use -n (skip adding a newline)
# with $'\n' (add a newline by hand) to make sure the contents of `$VAR` is not
# treated  as an option if it starts with -
echo -En "$VAR"$'\n'

Они специфичны для оболочки bash, вам потребуются другие подходы для других оболочек/echos, и обратите внимание, что некоторые реализации не позволяют выводить произвольные строки.

Но лучше всего использовать вместо этого printf, которая является стандартной командой для этого:

printf '%s\n' "$VAR"

См. Почему printf лучше, чем echo? для получения подробной информации.

2
18.03.2021, 22:35

используйте 4 обратной косой черты вместо 2

0
18.03.2021, 22:35

Теги

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