Intereting Posts
Преобразование MBR в GPT из-за двойной загрузки Добавьте пробел или вкладку перед последним символом в каждой строке Выбор несуществующих файлов с подстановочным знаком / регулярным выражением Откройте программу (VLC) и переместите ее на передний план IO пропускная способность ниже, когда только один процесс с использованием диска? Создать файлы из списка текстовых файлов SSD: альтернативный вариант замены swap partion или swap-файла Получить самый новый файл из структуры каталога год / месяц / дата / время Как я могу узнать, связана ли проблема с USB-портами на моем ноутбуке из-за аппаратного или программного обеспечения? Samba – освобождение блокировки файлов Пользовательский fstab для fusermount Преобразуйте ps в pdf с помощью ps2pdf, но файл pdf не очень хорош Как правильно переносить пересылку между различными машинами с использованием UFW / iptables и DD-Wrt? Как на величину / proc / stat повлияет количество ядер процессора или процессора? Сбой диска Solaris, как его удалить?

Написание сценария bash в новом окне, Escaping Code

Там может быть вопрос для этого где-то. Но я не смог найти его легко.

В основном я хочу написать сценарий bash в новом окне. Сценарий, который я использовал ранее.

Пример:

#!/bin/bash -ex hi='hello world!' echo $hi 

Я всегда использовал (для многострочного вывода)

 cat > script.sh <<EOF #!/bin/bash -ex hi='hello world!' echo $hi EOF 

Но, как вы могли заметить, это имеет проблемы с $ hi и другими символами. Есть ли хороший способ сделать это? Советы и хитрости?

Вы должны указать маркер конечного файла, в противном случае расширение переменной (или, вернее, все, начиная с $ , получит текущий контекст.

Для сравнения:

 hi=here cat >file.sh <<EOF #!/bin/sh hi=there echo $hi EOF sh file.sh 

(выходы here )

 hi=here cat >file.sh <<\EOF #!/bin/sh hi=there echo $hi EOF sh file.sh 

выходы there

 hi=here cat >file.sh <<'EOF' #!/bin/sh hi=there echo $hi EOF sh file.sh 

выходы there .

Кроме того, вы можете указать $ :

 hi=here cat >file.sh <<EOF #!/bin/sh hi=there echo \$hi EOF sh file.sh 

(выходы there )

Это изначально удивительное поведение очень удобно, когда необходимо создавать несколько разные сценарии для различных целей.

Кажется, я понял это. Все еще интересуется, как другие решают эту проблему:

 cat > script.sh <<'EOF' #!/bin/bash -ex hi='hello world!' echo $hi EOF 

В качестве примечания, похоже, что freebsd требует:

 cat > script.sh <<'EOF' #!/bin/bash -ex hi='hello world!' echo $hi 'EOF'