Интерпретация переменных из считанных в строке с помощью сценария оболочки

Просто у вас не установлена ​​переменная окружения DISPLAY=:0.

  1. Ты можешь бежать:

    export DISPLAY=:0;./tripwire --update --twrfile./report/name.twr
    
  2. или вы можете выйти из корневого сеанса терминала и начать новый, не передавая аргумент -, который заставит вас наследовать переменные env текущего сеанса, включая переменную DISPLAY. Итак, нажмите ctrl + d , а затем запустите su. Введите свой пароль, затем вы можете проверить свою среду с помощью команды envи grepдляDISPLAY:

    env | grep DISPLAY
    
  3. вы можете изменить редактор по умолчанию на консольный, например nanoили vim. Вы должны изменить, как указано в статье, поле EDITORв вашем файле конфигурации tripwire.

    Tripwire will display the report file using the default text editor specified on the EDITOR line of the Tripwire configuration file

Выберите, как вы хотите это сделать. Любой из этих трех способов позволит вам открыть приложение на основе графического интерфейса или изменить настройку текстового редактора графического интерфейса на консольную.

Первый и второй варианты наиболее просты, если предположить, что вы хотите использовать графический редактор для просмотра содержимого отчетов Tripwire.

0
31.05.2019, 19:48
2 ответа

Вероятно, было бы разумнее написать это как:

BLUE=$'\033[1;34m'
NC=$'\033[0m' # No Color

eval "cat << EOF
$(<text_file)
EOF
"

, чем использование цикла while read(, который не является правильным синтаксисом для чтения строк между прочим).

Конечно, это означает, что код будет интерпретирован. Например, $(reboot)вызовет перезагрузку, но это более или менее то, о чем вы просите.

Это также предполагает, что text_fileне содержит строки EOF.

Другой подход, который будет только делать переменную (переменную окружения )подстановку (а не подстановку команд, например ), заключается в использовании GNU gettext'senvsubst:

BLUE=$'\033[1;34m'
NC=$'\033[0m' # No Color
export BLUE NC
envsubst < text_file

Или так, чтобы раскрывались только эти две переменные:

BLUE=$'\033[1;34m'
NC=$'\033[0m' # No Color
export BLUE NC
envsubst '$BLUE$NC' < text_file
6
28.01.2020, 02:14

В более новых версияхbash(начиная с версии 4.4 или около того )есть еще один хитрый способ косвенного расширения переменных в строках без необходимости полногоeval:преобразования параметра @P(= расширить как в подсказках , включая, помимо прочего, замены переменных ).

$ cat file.txt
${BLUE}hello blue${NORM}

$ BLUE=$'\e[34m'
$ NORM=$'\e[m'
$ while IFS= read -r line; do printf '%s\n' "${line@P}"; done < file.txt
hello blue
2
28.01.2020, 02:14

Теги

Похожие вопросы