Cygwin X не работает с DISPLAY localhost: 0 в Windows 10

Вы не можете извлечь команду, которая сгенерировала переменную, потому что информации больше нет. Тем не менее, вы можете отложить выполнение команды для генерации var1 с помощью eval . Например:

var1="echo hello"
echo "var1: $var1"

var2="$var1"
echo "var2: $var2"

var1=$(eval "$var1")
echo "var1: $var1"

Напечатает:

var1: echo hello
var2: echo hello
var1: hello

Поскольку вы можете использовать eval для выполнения команды внутри var1 до тех пор, пока не потребуются выходные данные этой команды, вы можете оставить саму команду в var1 .

Хотя это не очень хорошая практика кодирования. Практически во всех случаях лучше иметь две переменные: одну, удерживающую команду, и одну, удерживающую вывод. Использование eval не одобряется из-за некоторых проблем безопасности и общих проблем отладки.


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

var3=$($var1)

Работает в вариантах bash и ksh . Нет в вариантах zsh .

3
09.10.2016, 14:47
4 ответа

Как упоминалось на
https://sourceware.org/ml/cygwin-announce/2015-10/msg00111.html

'- nolisten tcp 'теперь используется по умолчанию, поэтому сервер принимает только локальные соединения через сокет домена unix. Добавлена ​​опция «-listen», которую можно использовать для восстановления предыдущего поведения.

3
27.01.2020, 21:22

Вот как вы можете аннулировать «-nolisten tcp» option и запустить xserver автоматически :

    <path-to-cygwin>\bin\run.exe -p /usr/X11R6/bin XWin -listen tcp -multiwindow -clipboard -silent-dup-error
3
27.01.2020, 21:22

Я вижу, что лучше использовать ssh -Y hostвариантhttps://x.cygwin.com/docs/faq/cygwin-x-faq.html#q-ssh-no-x11forwarding

2
27.01.2020, 21:22

Мой ДИСПЛЕЙ установлен как «:0.0», и он работает хорошо. Я получил эту настройку методом проб и ошибок, но в часто задаваемых вопросах CYGWIN/X сказано следующее:

    3.13. I upgraded and now X clients can't connect

    A1:

    Since X server 1.17, by default the server does not listen for TCP/IP
    connections, only accepting local connections on a unix domain socket.

    For local clients, use DISPLAY=:0.0, rather than DISPLAY=localhost:0.0,        
    DISPLAY=127.0.0.1:0.0, DISPLAY=::1:0.0, etc. See Q: 1.6.. 
    A2:

    For remote clients, rather than connecting over TCP/IP by explicitly
    setting DISPLAY and allowing access using xhost or by disabling access
    control, use ssh tunnelling with ssh -Y instead. (See the User's Guide
    section on X forwarding using ssh for more details).

    A3:

    Use the -listen tcp option to restore the previous behaviour, allowing 
    the X server to open a TCP/IP socket as well e.g. startxwin -- -listen
    tcp. See Q: 4.2.. 

Часто задаваемые вопросы по CYGWIN/Xhttps://x.cygwin.com/docs/faq/cygwin-x-faq.html

2
27.01.2020, 21:22

Теги

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