Добавить "сырую" командную строку в bashr c через сценарий оболочки (без оценки команды) - PullRequest
1 голос
/ 13 июля 2020

Возможно, я неправильно ищу, но я не могу найти никакого решения для этого ...

Я хочу использовать сценарий оболочки, чтобы добавить следующее в мой файл bashr c (чтобы выполнить установку Windows Подсистема для Linux проще):

# Load X display (run 'XLaunch' on Windows with 'Disable access control' checked and 'Native opengl' unchecked!)
# https://sourceforge.net/projects/vcxsrv/
export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):0.0

Это мой скрипт. sh:

### Add useful stuff to bashrc
### --------------------------
echo "
# Load X display (run 'XLaunch' on Windows with 'Disable access control' checked and 'Native opengl' unchecked!)
# https://sourceforge.net/projects/vcxsrv/
export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):0.0
" >> ~/.bashrc

Это то, что добавляется к bashr c при запуске script. sh:

# Load X display (run 'XLaunch' on Windows with 'Disable access control' checked and 'Native opengl' unchecked!)
# https://sourceforge.net/projects/vcxsrv/
export DISPLAY=172.19.96.1:0.0

Поскольку мой IP-адрес может измениться, я хочу добавить саму необработанную команду в bashr c, а не вывод команды. Я уверен, что это повторяющийся вопрос, но я не могу найти полезного ответа. Есть просто множество ответов, которые просто относятся к echo или cat. cat дает тот же нежелательный результат:

cat <<EOF >> ~/.bashrc
# Load X display (run 'XLaunch' on Windows with 'Disable access control' checked and 'Native opengl' unchecked!)
# https://sourceforge.net/projects/vcxsrv/
export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):0.0
EOF

1 Ответ

2 голосов
/ 13 июля 2020

Проблема заключается в использовании двойных кавычек / тиков по сравнению с одинарными кавычками / тиками

Попробуйте отменить использование «и», так как «интерпретирует и запускает команду, а» не интерпретирует и не запускает ее.

Это должно работать:

echo 'export DISPLAY=$(grep -m 1 nameserver script.sh | awk '\''{print $2}'\''):0.0' >> temp.txt

$ cat temp.txt
export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):0.0

Ссылка: https://www.howtogeek.com/howto/29980/whats-the-difference-between-single-and-double-quotes-in-the-bash-shell/

Ссылка на экранирование текста внутри строки в кавычках: { ссылка }

...