[LÖST] Shell script-fråga

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
hanssolo
Inlägg: 12
Blev medlem: 08 mar 2010, 00:21
OS: Ubuntu

[LÖST] Shell script-fråga

Inlägg 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
Senast redigerad av 2 hanssolo, redigerad totalt 13 gång.
Användarvisningsbild
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

Inlägg 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.
hanssolo
Inlägg: 12
Blev medlem: 08 mar 2010, 00:21
OS: Ubuntu

Re: Shell script-fråga

Inlägg 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.
Användarvisningsbild
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

Inlägg 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).
hanssolo
Inlägg: 12
Blev medlem: 08 mar 2010, 00:21
OS: Ubuntu

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

Inlägg 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!
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

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

Inlägg 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
Skriv svar

Återgå till "Terminalforum"