Logga samtliga terminaler [LÖST]

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

Logga samtliga terminaler [LÖST]

Inlägg av hanssolo »

Hej,

Jag har en fråga;
jag skulle vilja använda kommandot "script" för att logga stdin/stdout/stderr på samtliga terminaler som jag startar efter uppstart av OS.

Hur gör man det på enklast/bästa sätt?
Jag förstår också att jag inte därmed kommer att logga alla tangenttryckningar, men det är inte heller syftet. Är ute efter att i efterhand kunna gå igenom samtliga kommandon jag skrivit och vad resultatet blivit. Alltså ej vad jag skrivit i t ex VI vid editering av fil.

Förslag?

/ Hasse
Senast redigerad av 2 hanssolo, redigerad totalt 16 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: Logga samtliga terminaler

Inlägg av mcNisse »

Hej och välkommen till ubuntu-se.org

Det här kräver lite mixtrande. Jag har idéer om hur du skulle kunna göra, men jag har inget intresse av att göra det själv. Bara så att du vet att jag inte själv har gjort det jag föreslår.

Lite bakgrund.
När du startar ett nytt skal, bash, körs vissa filer, tex ~/.bashrc ~/.bash.profile. Det enkla vore att i dessa starta script i dessa filer. Men när du startar skript startas ett nytt skal osv. Så det gäller att se till att script enbart körs en gång. Annars kommer maskinen dö tills att du får bort loopen, (det är egentligen ingen loop utan rekursion utan slut). Så hela det här tillvägagångssättet är ganska farligt om man gör fel.
För att komplicera det hela lite till så körs inte bägge de här skripten varje gång du startar ett nytt skal, och jag är faktiskt lite osäker på när de körs. Kolla man sidan för bash för mer informaition.

Vad du kan göra.
Lägg till följande rader i .bashrc

Kod: Markera allt

[ -z "$SCRIPT_STARTED" ] && {
   SCRIPT_STARTED=$(mktemp -d ~/ script)
   export SCRIPT_STARTED
   script  $SCRIPT_STARTED
}
Det kan behövas en liten förklaring
[ -z "$SCRIPT_STARTED" ] kontrollerar att "$SCRIPT_STARTED" är tomt (att längdet av strängen är 0). Det är det första gången .baschrc körs.
&& betyder att om kommandot innan går bra så kör nästa kommando.
{ } innehåller flera kommandon (kan ses som ett icke namgett skript).
SCRIPT_STARTED=$(mktemp -d ~/ script) tilldelar variabeln SCRIPT_STARTED ett unikt filnamn i din hemkatalog. Namnet startart med script. Det blir felen som du kommer att logga i. Det blir ett per skal med den här metoden.
export SCRIPT_STARTED gör om variableln till en miljövariabel.
script $SCRIPT_STARTED startar skript.

Var mycket försiktig... Tänk på att kontrellera när skripten körs och undvik att ha ihjäl datorn pga rekursioner...

Om du är osäker tror jag att det är bättre att starta script monuellt. Dessutom finns kanske det finns någon som har en bättre idé ;)
hanssolo
Inlägg: 12
Blev medlem: 08 mar 2010, 00:21
OS: Ubuntu

Re: Logga samtliga terminaler

Inlägg av hanssolo »

Tack, det är något sådant jag behöver.
Har inte testat ännu, men ska göra det inom kort.

Kanske siktar jag på att placera variabelkollen/exekvering av "script" någonstans under /etc/ (bash.bashrc?)
Då kan man det få att gälla för fler users än för endast den user som man editerat .profile.

Som jag förstår kommandot "script" så skapas ytterligare en konsole-process (motsv) när "script" körs. Därav rekurssionsproblematiken då detta skal även läser in exekveringen av "script".

Att sätta en variabel och kontrollera denna borde funka, men jag är lite nyfiken på om det finns någon "renare" lösning? (no offense, det var en bra lösning, men du förstår säkert vad jag menar)

/ Hasse
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: Logga samtliga terminaler

Inlägg av mcNisse »

hanssolo skrev:Att sätta en variabel och kontrollera denna borde funka, men jag är lite nyfiken på om det finns någon "renare" lösning? (no offense, det var en bra lösning, men du förstår säkert vad jag menar)
Förstår exakt. Hoppas någon annan har någon idé.
hanssolo
Inlägg: 12
Blev medlem: 08 mar 2010, 00:21
OS: Ubuntu

Re: Logga samtliga terminaler

Inlägg av hanssolo »

Detta funkade bra. Ändrade lite i mktemp så att det körde med -p directory samt i script-kommandot så att det flushade characters under tiden (minns inte vilken växel det var) samt att script-kommandot exekverade med -q=quit.
Lade in detta i .bashrc som körs för varje icke-inloggningsterminal-session.

Tackar för hjälpen / Hasse
Skriv svar

Återgå till "Terminalforum"