Как печатать переменные и значения оболочки для их копирования и вставки?

В Bash 4.2.25 вывод set и env не экранируется, поэтому оболочка выходит из строя, и любые непечатаемые символы не будут копироваться. Возьмем, к примеру, этот сеанс оболочки:

 $ export foo=$'a\nbar=\baz' $ env | grep -A 1 foo foo=a baraz 

То же, например, цвета – они печатаются буквально и могут испортить терминал. Как вы печатаете все переменные с их значениями таким образом, чтобы результат можно было скопировать и вставить, чтобы дать одну и ту же среду? *

* Очевидно, со стандартными предостережениями о переменных только для чтения, специальных переменных, таких как $_ и т. П.

2 Solutions collect form web for “Как печатать переменные и значения оболочки для их копирования и вставки?”

Вы можете сделать:

 printvars() ( eval 'declare() { printf declare; printf " %q" "$@"; echo; }'" $(declare -p)" ) printvars 

Это можно было бы легко расширить, чтобы опустить переменные только для чтения, такие как:

 printvars() ( eval 'declare() { [[ $1 = *r* ]] && return printf declare; printf " %q" "$@"; echo }'" $(declare -p)" ) 
 escaped_env() { cat /proc/self/environ | while IFS== read -r -d '' name value do printf '%s=%q\n' "$name" "$value" done } 

Пример сеанса:

 $ export foo=$'a\nbar=\baz' $ escaped_env | grep foo foo=$'a\nbar=\baz' 

Это работает, но только для export переменных, а set не имеет опции ␀-separator.

FYI, файловая система / proc не является функцией POSIX.1-2008 , и похоже, что только Linux реализует /proc/self/environ . Если ваша ОС не имеет этого файла, вы можете использовать env --null перед трубой.

  • Использование команды eval дважды
  • Найдите комбинацию клавиш терминала OS X / escape-последовательность для Ctrl-
  • Как избежать кавычек в оболочке?
  • Как кнопка tp Print / echo в unix-bash, версия 3.2.52
  • Как определить текущий цвет вывода консоли?
  • Как получить результаты из «\ 033 [6n» в сценарии sh
  • Попытка распечатать клавиши со стрелками вниз
  • Как сделать терминал user @ машиной выделен жирным шрифтом?
  • Удаление всех файлов, начинающихся со скобок
  • Создать мигающий текст с эхо-символами
  • Применение символов Escape в перенаправленном выходе
  • Linux и Unix - лучшая ОС в мире.