Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Maj 2004

Problem med "cat" commandot

Har skrivit ett script som bla. ska skriva ut datumet när scriptet kördes i en fil. Det ser ut såhär:

cat | date >> log.txt

Problemet är att jag måste avbryta inputen till cat med ^D varje gång jag kör kommandot. Finns det något sätt att slippa detta?

Trädvy Permalänk
Medlem
Plats
irc
Registrerad
Dec 2004

Varför inte bara:

date >> log.txt

Behind every great fortune there is a crime. - Honoré de Balzac
simonb @ irc

Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Maj 2004
Citat:

Ursprungligen inskrivet av Movement
Varför inte bara:

date >> log.txt

Ah! Mycket bra Tackar

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2007

Om du vill ha en förklaring varför ditt första försök inte fungerade så kommer här dagens lektion i bashscriptande Det är så att date >> log.txt stoppar in datumet i log.txt, som du säkert redan listat ut. Sen "pipar" du resulatet till cat, men date >> log.txt ger ingen utskrift då du redan skickat vidare allt från date till log.txt. Om man sen startar cat utan att ange något så kommer cat bara att eka tillbaks allt från standard output, dvs. det som skrivs in. Testa att starta cat och skriv något, så ser du att den upprepar det du skrev in när du trycker enter. Föga användbart kanske, men så fungerar det.

Så cat | date >> log.txt kommer att stoppa in utskriften från date i log.txt, och sen skicka vidare resultatet, som är ingenting, till cat. cat startas då i "ekoläge", och står och väntar på att du ska skriva in någonting. Hade du däremot kört bara cat | date så hade date skickat vidare datumet till cat som hade sedan hade skrivit ut datumet. Men cat hade ändå inte avslutats, utan fortsatt att eka tills du avbrutit cat.

Trädvy Permalänk
Medlem
Plats
Bollnäs
Registrerad
Maj 2002
Citat:

Ursprungligen inskrivet av perost
Om du vill ha en förklaring varför ditt första försök inte fungerade så kommer här dagens lektion i bashscriptande Det är så att date >> log.txt stoppar in datumet i log.txt, som du säkert redan listat ut. Sen "pipar" du resulatet till cat, men date >> log.txt ger ingen utskrift då du redan skickat vidare allt från date till log.txt. Om man sen startar cat utan att ange något så kommer cat bara att eka tillbaks allt från standard output, dvs. det som skrivs in. Testa att starta cat och skriv något, så ser du att den upprepar det du skrev in när du trycker enter. Föga användbart kanske, men så fungerar det.

Så cat | date >> log.txt kommer att stoppa in utskriften från date i log.txt, och sen skicka vidare resultatet, som är ingenting, till cat. cat startas då i "ekoläge", och står och väntar på att du ska skriva in någonting. Hade du däremot kört bara cat | date så hade date skickat vidare datumet till cat som hade sedan hade skrivit ut datumet. Men cat hade ändå inte avslutats, utan fortsatt att eka tills du avbrutit cat.

tvärtom väl?

cat | date >> log.txt kommer få cat att försöka skicka sin output (som är noll iom att den inte har någon input) till date >> log.txt ?

För han pipar ju cat till date där, och inte date till cat, som ju skulle bli date | cat >> log.txt ?

Det du beskriver låter ju mer som date >> log.txt | cat, d.v.s. att han pipear noll out från date till cat som bara väntar?

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Maj 2004

Det är som bogg säger, han pipeline:ar ju cat till date och inte tvärt om.

Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Maj 2004

Jag slänger in en ny fråga här, lite skild från ämnet: Jag vill köra mitt script när min externa disk mountas. Finns det något smidigt sätt att aktivt lyssna /Volumes när disk "Blabla" mountas?

Trädvy Permalänk
Hedersmedlem
Plats
Uppsala
Registrerad
Jul 2001

Kolla upp Folder actions, det kanske funkar till sånt.
http://docs.info.apple.com/article.html?path=Mac/10.4/en/mh19...

X370 Taichi / R7 1700 @ 3.75 GHz 1.2 V / 2x8 GB 3200 MHz CL16 / MSI GTX 1070 Gaming, OC / Samsung 960 EVO 500 GB / Corsair RM650x
LG G6 (H870)

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jul 2001

Ja alltså ekoläge är ju inget annat än att inputströmmen som levereras till cat utan några argument är stdin, vilket blir terminalen.

Björn