Перенаправление вывода в другое окно

#shell #escaping #pipe #x11 #xterm

#оболочка #экранирование #канал #x11 #xterm

Вопрос:

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

  1. Что-то вроде printf "%sn" "$data" | xterm -e less (не работает). Возможно ли как-то перенаправить вывод или мне нужно использовать временный файл?

  2. Что-то вроде 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 -