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
()
Ответ на: комментарий от anonymous

Но ведь внутри него я тоже взял одинарные кавычки.

Меня это смущает:

' ... "..." ' = " ... '... ' "

\$DISPLAY

Спасибо.

ksevelyar
() автор топика
Ответ на: комментарий от 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
()
Ответ на: комментарий от anonymous

Теперь дошло, спасибо за объяснение.

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