Hej,
Jag sitter och tittar på ett shell-script som i grova drag har följande:
------------------------------
#!/bin/sh
# kommandon A
cat << 'XXX' > file.sh
while true; do
# kommandon B
done
XXX
## starta file.sh med nohup
## kontrollera att kommandona B har utförts
------------------------------
Vad sker vid cat << 'XXX' > file.sh? Jag förstår att man skriver till "file.sh" men cat << 'XXX'?
Det verkar som om man hoppar till XXX och utför starten av file.sh, men att kommandona B redan utförts? Görs dessa i filen file.sh?
Stämmer det?
Kan någon förklara?
Tack!
/ Hasse
[LÖST] Shell script-fråga
[LÖST] Shell script-fråga
Senast redigerad av 2 hanssolo, redigerad totalt 13 gång.
- mcNisse
- Inlägg: 5211
- Blev medlem: 06 feb 2007, 20:51
- OS: Debian
- Utgåva: Vet inte/ingen utgåva passar
Re: Shell script-fråga
Jag kan göra ett förskök 
Är en konstruktion tar allt som står mellen EOF och EOF och skickar det till stdin på kommandot som står innan i det har fallet cat. cat i det fallet skickar det på stdout. Men i ditt fall kopieras allt mellan XXX och XXX till file.sh efter som det finns en redirect >.
Kommandorna B utförs när skriptet file.sh körs.

Kod: Markera allt
cat <<EOF
...
EOF
Kommandorna B utförs när skriptet file.sh körs.
Re: Shell script-fråga
Tack,
Hade ingen aning att man kan göra:
cat << 'ABCD' > enfil
skriva lite
skriva lite mer
skriva abcd
inget händer
men när man skriver
ABCD
Skrivs det man skrivit till "enfil"
Alltid lär man sig något! Tackar.
Hade ingen aning att man kan göra:
cat << 'ABCD' > enfil
skriva lite
skriva lite mer
skriva abcd
inget händer
men när man skriver
ABCD
Skrivs det man skrivit till "enfil"
Alltid lär man sig något! Tackar.
- mcNisse
- Inlägg: 5211
- Blev medlem: 06 feb 2007, 20:51
- OS: Debian
- Utgåva: Vet inte/ingen utgåva passar
Re: [LÖST] Shell script-fråga
Vill du skapa en fil i terminalen är det enklare att skriva
avsluta med ctrl-D (vilket betyder eof, end of file).
Kod: Markera allt
cat > enfil
bla
bla
bra
Re: [LÖST] Shell script-fråga
Jo, det är jag helt på det klara med, men att man kan substituera EOF mot vilken textsträng som helst var för mig obekant.
Åter igen, tackar!
Åter igen, tackar!
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: [LÖST] Shell script-fråga
Det där kallas för here-document. Jag har inte mycket att tillägga annat än att det finns en viktig skillnad mellan <<EOF och <<'EOF' som kan vara bra att känna till. Utan fnuttar runt avdelarordet så ersätts bland annat variabler med variabel-värdet även om variabeln är inom enkelfnuttar.
I det här fallet kommer filen innehålla texten 'hejsan':
Men nu kommer filen istället innehålla texten '$FOO':
I det här fallet kommer filen innehålla texten 'hejsan':
Kod: Markera allt
FOO=hejsan
cat <<EOF >filen
'$FOO'
EOF
Kod: Markera allt
FOO=hejsan
cat <<'EOF' >filen
'$FOO'
EOF