Экран GNU: переменные среды

[Обновлено] Вопрос связан с вопросами Экран GNU: цитаты программистов в Readbuf и Экран GNU: файлы в пронумерованные буферы?. Поскольку они не решены, вопрос касается более общей концепции переменных среды. Я считаю, что они - ключ к повышению эффективности Screen.

1. Как я могу использовать переменные Bash на экране, например:

$ export path=`pwd`
$ ^a :readbuf `echo $path`/debugging_code.php

2. Как я могу повторно использовать буферы экрана, например:

$ ^a :readreg a `echo $path`
$ ^a :readbuf $a/debugging_code.php
$ ^a ]

3. Как я могу использовать буферы экрана, такие как переменные среды?


person Léo Léopold Hertz 준영    schedule 23.08.2009    source источник
comment
Похоже, это тот же вопрос, что и тот, на который я только что ответил: stackoverflow.com/questions/1318186/   -  person Greg Hewgill    schedule 23.08.2009
comment
Грег: Обновлено, надеюсь, теперь стало понятнее.   -  person Léo Léopold Hertz 준영    schedule 23.08.2009
comment
Встречный вопрос для (1): когда у вас открыто несколько оболочек, каждая с другой средой, какие переменные среды оболочки вы хотите использовать на экране?   -  person rampion    schedule 28.08.2009


Ответы (2)


Следующая команда не создает новый сеанс экрана, но создает внутреннюю переменную экрана. Запуск его в командной строке позволяет использовать расширение оболочки:

$ screen -X setenv a "$PWD/debugging_code.php"

Затем используйте новую переменную:

C-a :readbuf $a
person Community    schedule 23.08.2009
comment
+1 за крутость. Похожий в Ubuntu screen -X export foo = foo world по какой-то причине не работал. - person Léo Léopold Hertz 준영; 23.08.2009
comment
Обратите внимание, что setenv в этом контексте является экранной командой, а не командой shudder csh. - person Chen Levy; 23.08.2009
comment
Не могли бы вы прояснить, как вы его используете. Не знаю, почему это не работает на моем Ubuntu. - person Léo Léopold Hertz 준영; 23.08.2009
comment
Маси, читая ваш первый комментарий, я подозреваю, что вы подумали, что указанная выше setenv является конструкцией csh, и вы заменили ее эквивалентной константой экспорта bash. Однако здесь setenv - это экранная команда GNU. Для получения дополнительной информации grep -X в `screen --help; также grep setenv на экране человека. - person Chen Levy; 23.08.2009
comment
ИМХО, это лучшее возможное решение, так как подключение к оболочке текущего окна для переменных окружения кажется небезопасным, сложным (через сколько переходов ssh вы прошли?) И не обязательно оптимальным (возможно, мне не нужны переменные окружения моего экрана) менять каждый раз, когда меняю окна). Это оставляет работу оболочки оболочке и позволяет screen делать то, что ему нужно. - person rampion; 28.08.2009

Я сделал патч для экрана 4.0.3, который поддерживает следующий синтаксис:

^A :readbuf !shell-command

Это позволяет вам выполнить любую произвольную команду оболочки и направить вывод в экранный буфер. Обратите внимание, что это реализуется путем выполнения подоболочки с использованием popen и копирования стандартного вывода в текущий файл, указанного в настройке bufferfile (с последующим чтением этого файла), поэтому будьте осторожны, чтобы не перезаписать то, что вы не собираетесь делать. Кроме того, этот патч, вероятно, очень небезопасен, поэтому используйте его на свой страх и риск.

Примером может быть:

^A :readbuf !cat $HOME/projects/foobar/file.txt

Любая команда оболочки выполняется буквально в том виде, в котором она была введена.

См. gnu-screen-readbuf-exec в Github для репозитория Git, содержащего пластырь.

person Greg Hewgill    schedule 23.08.2009