Sida 1 av 1

[LÖST] Shell script-fråga

Postat: 13 aug 2010, 15:43
av hanssolo
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

Re: Shell script-fråga

Postat: 13 aug 2010, 16:02
av mcNisse
Jag kan göra ett förskök :)

Kod: Markera allt

cat <<EOF
...
EOF
Ä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.

Re: Shell script-fråga

Postat: 13 aug 2010, 22:42
av hanssolo
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.

Re: [LÖST] Shell script-fråga

Postat: 14 aug 2010, 08:15
av mcNisse
Vill du skapa en fil i terminalen är det enklare att skriva

Kod: Markera allt

cat > enfil
bla
bla
bra
avsluta med ctrl-D (vilket betyder eof, end of file).

Re: [LÖST] Shell script-fråga

Postat: 14 aug 2010, 09:45
av hanssolo
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!

Re: [LÖST] Shell script-fråga

Postat: 14 aug 2010, 22:59
av Konservburk
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':

Kod: Markera allt

FOO=hejsan
cat <<EOF >filen
'$FOO'
EOF
Men nu kommer filen istället innehålla texten '$FOO':

Kod: Markera allt

FOO=hejsan
cat <<'EOF' >filen
'$FOO'
EOF