2012-03-26 4 views
14

Мне нужно вывести некоторый текст как скрипт bash, но в сценарий. Для этого я использую кошку, но у нее есть один недостаток. Он интерпретирует переменные и прочее во время написания. Я хочу предотвратить это.Предотвратить bash от интерпретации без котировки всего

Как это сделать без котировки всех varibles (мой скрипт неудачно длинный)? Пример

cat >/tmp/script << EOF 
    $HOSTNAME 
    # lots of other stuff I do NOT want to escape like \$VARIABLE 
    # ... 
EOF 

cat /tmp/script 
myhostname.mylan 

Я хочу:

cat /tmp/script 
$HOSTNAME 

Edit: Обратите внимание, мой сценарий (здесь только $ HOSTNAME) очень долго, я не хочу, чтобы изменить все это. Также сингл со ссылкой не работает с < <

cat >/tmp/script '<< EOF 
    $HOSTNAME 
EOF' 
File not found: EOF' 

Что трюк? Благодарю.

+0

Может ли кто-нибудь сказать, почему это не интерпретируется в моем случае? '$ echo $ HOSTNAME' ->' myhost'; '$ echo \ $ HOSTNAME' ->' $ HOSTNAME'; '$ echo \ $ HOSTNAME>/tmp/s; cat/tmp/s' -> '$ HOSTNAME' –

ответ

48

Если вы хотите все цитируемый:

cat << 'EOF' 
stuff here with $signs is OK 
as are `backquotes` 
EOF 

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

+0

ЭТО ЧТО Я ХОЧУ, СПАСИБО! :-) – lzap

+0

'cat << EOF' does'nt escape' $ 'вещи и' cat << 'EOF'', хорошо поймать здесь! –

+0

УДИВИТЕЛЬНО! Мне жаль, что я бы не смог подавать голоса вверх :-) –

1

Побег $:

cat >/tmp/script << EOF 
    \$HOSTNAME 
EOF 
+0

Нет, как описано - у меня есть тысячи строк - я не собираюсь этого делать. Это будет работать на моем простом примере, да, но я пытаюсь найти другое решение. Вот почему тема. – lzap

+1

@lzap, 'sed 's \ \ $/\\ $/g''? –

0

Попробуйте с эхо:

echo ' 
$HOSTNAME 
... 
' >> /tmp/script 
1

Использование СЭД:

sed -n '20,30p' "$0" 

к линии печати 20 до 30, ВПЧЭ:

#!/bin/bash 
cat >/dev/null << EOF 
3 
4 $HOSTNAME 
5 ls 
6 $(ls -l) 
7 
8 echo 'foo 
9 bar' 
10 
11 echo "Foo 
12 $((4+4)) Bar" 
EOF 
sed -n '3,12p' "$0" 
echo "fine?" 

Работа с головкой/хвостом тоже должна работать.

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

+0

Upvoting, теперь есть решение, но приятное усилие! Благодаря! – lzap

Смежные вопросы