Вы не можете извлечь команду, которая сгенерировала переменную, потому что информации больше нет. Тем не менее, вы можете отложить выполнение команды для генерации 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
.
Как упоминалось на
https://sourceware.org/ml/cygwin-announce/2015-10/msg00111.html
'- nolisten tcp 'теперь используется по умолчанию, поэтому сервер принимает только локальные соединения через сокет домена unix. Добавлена опция «-listen», которую можно использовать для восстановления предыдущего поведения.
Вот как вы можете аннулировать «-nolisten tcp» option и запустить xserver автоматически :
<path-to-cygwin>\bin\run.exe -p /usr/X11R6/bin XWin -listen tcp -multiwindow -clipboard -silent-dup-error
Я вижу, что лучше использовать ssh -Y host
вариантhttps://x.cygwin.com/docs/faq/cygwin-x-faq.html#q-ssh-no-x11forwarding
Мой ДИСПЛЕЙ установлен как «: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