LINUX.ORG.RU

[bash] Переменная отказывается экранироваться в одинарных кавычках


0

1

Всё ок:

echo -e '\nif [[ -z $DISPLAY ]] && ! [[ -e /tmp/.X11-unix/X0 ]] && (( EUID )); then\n  exec xinit -- /usr/bin/X -nolisten tcp vt7\nfi'
if [[ -z $DISPLAY ]] && ! [[ -e /tmp/.X11-unix/X0 ]] && (( EUID )); then
  exec xinit -- /usr/bin/X -nolisten tcp vt7
fi

$МОНИТОР пропал:

su ksevelyar -c "echo -e '\nif [[ -z $DISPLAY ]] && ! [[ -e /tmp/.X11-unix/X0 ]] && (( EUID )); then\n  exec xinit -- /usr/bin/X -nolisten tcp vt7\nfi'"
if [[ -z  ]] && ! [[ -e /tmp/.X11-unix/X0 ]] && (( EUID )); then
  exec xinit -- /usr/bin/X -nolisten tcp vt7
fi

Почему? Как починить?

Как починить?

\$DISPLAY

Почему?

потому, что ты добавил во втором случае ещё один шелл, который произвёл variable expansion

anonymous ()

ну и сама конструкция
if [[ -z $DISPLAY ]] && ! [[ -e /tmp/.X11-unix/X0 ]] && (( EUID ));

это ваще адовый ппц. достаточно банального pidof Xorg || ...

anonymous ()
Ответ на: комментарий от ksevelyar

не, ты не понел, смотри:

$ set -x
++ echo -ne '\033]0;***@***:~\007'
$ su -c «echo -e '\nif [[ -z $DISPLAY ]] && ! [[ -e /tmp/.X11-unix/X0 ]] && (( EUID )); then\n exec xinit — /usr/bin/X -nolisten tcp vt7\nfi'»
+ su -c 'echo -e '\"\nif [[ -z :0 ]] && ! [[ -e /tmp/.X11-unix/X0 ]] && (( EUID )); then\n exec xinit — /usr/bin/X -nolisten tcp vt7\nfi'\"'
Password:

if [[ -z :0 ]] && ! [[ -e /tmp/.X11-unix/X0 ]] && (( EUID )); then
exec xinit — /usr/bin/X -nolisten tcp vt7
fi
++ echo -ne '\033]0;***@***:~\007'
у тебя в подшелл, в одинарных кавычках уже идёт подставленное значение переменной

anonymous ()
Ответ на: комментарий от anonymous

те, кагбе, вложеные кавычки уже являются обычным символом, тк предыдущие кавычки их заэкранировали

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.