#shell #escaping #pipe #x11 #xterm
#оболочка #экранирование #канал #x11 #xterm
Вопрос:
В моем скрипте я хочу открыть новое окно, чтобы показать содержимое переменной. У меня есть две наполовину испеченные идеи:
-
Что-то вроде
printf "%sn" "$data" | xterm -e less
(не работает). Возможно ли как-то перенаправить вывод или мне нужно использовать временный файл? -
Что-то вроде
xterm -e 'printf "%sn" "'"$data"'" | less'
, но это приводит к проблемам, если$data
содержит что-то, что нужно экранировать.
Ответ №1:
Попробуйте этот эквивалентный пример (добавлены пустые пробелы, просто чтобы показать, как объединяются строки в одинарных кавычках):
export data='embedded " double quote'
export data="$data embedded ' singlequote"
echo 'printf "%sn" ' '"$data"' ' | less'
приводит к:
printf "%sn" "$data" | less
Это то, что увидит xterm (точно так же, как echo выше).
Комментарии:
1. Мой пример 2 завершится неудачей, если $data имеет
"
.
Ответ №2:
Используйте xless
, xmore
, или xmessage
, в зависимости от того, что вы установили.
Попробуйте любой из этих:
printf "%sn" "$data" | xless
printf "%sn" "$data" | xmore /dev/stdin
printf "%sn" "$data" | xmessage -file -