Bash crash - script exekveras ej, internt kommando endast i interaktivt läge

Permalänk
Avstängd

Bash crash - script exekveras ej, internt kommando endast i interaktivt läge

Jag försöker köra följande

history -c
history -w

som ett bash-script, med chmod -xv, men jag kan inte få det att fungera. Kör jag kommandona manuellt, så fungerar manövern. Så vad kan vara problemet?

(lade till text i rubriken för att förtydliga problemställningen, annars kommer helvetets och himmelens alla änglar efter mig och kräver precision. lowercase stupid! WCHIYDNWCE - We Cant Help If You Do Not Write Clearly and Explicitly)

Permalänk
Medlem

Har du bash headern i filen?

Permalänk
Entusiast

"history" är ett internt kommando som bash bara kör i interkativt läge. Det vill säga att kommandot inte fungerar i script.... normalt sett.
Men det går att ändra på genom att lägga till detta i början på scriptet. (Efter hashbangen givetvis)

HISTFILE=~/.bash_history set -o history

Permalänk
Avstängd

Nästa fråga, kommer extrakommandot att vara temporärt för varje körning av scriptet eller det ändrar systemvärdena helt?

http://ss64.com/bash/set.html

---korrigering---
lösningen hjälpte ej

Permalänk
Entusiast
Skrivet av wereaz:

Nästa fråga, kommer extrakommandot att vara temporärt för varje körning av scriptet eller det ändrar systemvärdena helt?

http://ss64.com/bash/set.html

---korrigering---
lösningen hjälpte ej

Variabler som sätts i script är temporära för just det scriptet under dess körning, och bara inom scriptets egna miljö.
Och lösningen borde fungera, om det är bash, sh eller kompatibla skal ni använder.

Se följande exempel:

#!/bin/sh HISTFILE=~/.bash_history set -o history history

Tillägg:
Se till att kontrollera att ~/.bash_history är den rätta filen för kommandohistorian. Om inte, uppdatera HISTFILE till att peka mot den rätta filen.

Permalänk
Avstängd
Skrivet av SysGhost:

Tillägg:
Se till att kontrollera att ~/.bash_history är den rätta filen för kommandohistorian. Om inte, uppdatera HISTFILE till att peka mot den rätta filen.

Den filen var den rätta filen, men existerar tydligen inte vilket gör att scriptet ej fungerar. Därför letade jag efter en annan lösning som blev följande

$ echo 'rm ~/.bash_history' >> ~/.bashrc
På denna sida beskrivs när .bashrc antagligen anropas http://stefaanlippens.net/bashrc_and_others (Antagligen eftersom det är en text från 2005 och beroende på nedan beskrivna konsekvenser)

Det mest fantastiska är att när jag startar en ny session får jag felmeddelandet cannot remove /home/user/.bash_history : No such file or directory men history är rensad när jag kör $ history!
Betyder det att bash raderar .bash_history när en session stängs eller betyder det att .bashrc-kommandot ovan exekveras korrekt trots att det är felaktigt? Det vill det verkar kunna radera history, trots att filen som skall raderas ej existerar på förhand. Har vi hamnat i

Sedan är frågan vad skillnaden mellan etc/bash_bashrc och ~/.bashrc är? När jag kör leafpad på den senare filen hittar jag min adderade textsträng, men inte när jag kör leafpad på etc/bash_bashrc

Permalänk
Medlem
Skrivet av wereaz:

Den filen var den rätta filen, men existerar tydligen inte vilket gör att scriptet ej fungerar. Därför letade jag efter en annan lösning som blev följande

$ echo 'rm ~/.bash_history' >> ~/.bashrc
På denna sida beskrivs när .bashrc antagligen anropas http://stefaanlippens.net/bashrc_and_others (Antagligen eftersom det är en text från 2005 och beroende på nedan beskrivna konsekvenser)

Det mest fantastiska är att när jag startar en ny session får jag felmeddelandet cannot remove /home/user/.bash_history : No such file or directory men history är rensad när jag kör $ history!
Betyder det att bash raderar .bash_history när en session stängs eller betyder det att .bashrc-kommandot ovan exekveras korrekt trots att det är felaktigt? Det vill det verkar kunna radera history, trots att filen som skall raderas ej existerar på förhand. Har vi hamnat i
https://www.youtube.com/watch?v=FrWK3Rnrdcs

Sedan är frågan vad skillnaden mellan etc/bash_bashrc och ~/.bashrc är? När jag kör leafpad på den senare filen hittar jag min adderade textsträng, men inte när jag kör leafpad på etc/bash_bashrc

~/ står för /home/användarnamn/

Permalänk
Inaktiv
Skrivet av wereaz:

Den filen var den rätta filen, men existerar tydligen inte vilket gör att scriptet ej fungerar. Därför letade jag efter en annan lösning som blev följande

$ echo 'rm ~/.bash_history' >> ~/.bashrc
På denna sida beskrivs när .bashrc antagligen anropas http://stefaanlippens.net/bashrc_and_others (Antagligen eftersom det är en text från 2005 och beroende på nedan beskrivna konsekvenser)

Det mest fantastiska är att när jag startar en ny session får jag felmeddelandet cannot remove /home/user/.bash_history : No such file or directory men history är rensad när jag kör $ history!
Betyder det att bash raderar .bash_history när en session stängs eller betyder det att .bashrc-kommandot ovan exekveras korrekt trots att det är felaktigt? Det vill det verkar kunna radera history, trots att filen som skall raderas ej existerar på förhand. Har vi hamnat i
https://www.youtube.com/watch?v=FrWK3Rnrdcs

Sedan är frågan vad skillnaden mellan etc/bash_bashrc och ~/.bashrc är? När jag kör leafpad på den senare filen hittar jag min adderade textsträng, men inte när jag kör leafpad på etc/bash_bashrc

Blir väldigt förvirrad av din text...
Vill du radera ~/.bash_history varje gång du loggar in så har du gjort rätt med $ echo 'rm ~/.bash_history' >> ~/.bashrc

Permalänk
Avstängd
Skrivet av anon176726:

Blir väldigt förvirrad av din text...
Vill du radera ~/.bash_history varje gång du loggar in så har du gjort rätt med $ echo 'rm ~/.bash_history' >> ~/.bashrc

Ja, bash-historien raderas, men vart kommer då felmeddelandet ifrån att filen jag försöker radera ej existerar? Hur kan något raderas som ej existerar? I min värld borde kommandot ovan antingen endast exekveras om bash_history raderats, eller om den filen ej existerar ge felmeddelandet. Nu får jag emellertid felmeddelandet, men historien raderas ändå.

Ha ha, jag förstår nu problemet. Jag hade flera flikar öppna i bash vilket gjorde att första fliken raderade historien, men jag såg endast den sista öppna fliken där ingen historia fanns att radera. Mänskliga faktorn igen.

Permalänk
Inaktiv

Startar du en ny "bash session" så körs .bashrc
Om du sitter i någon fönsterhanterar och startar xterm eller vad du nu använder så varje gång du gör det körs .bashrc

#!/bin/bash if [ -f ~/.bash_history ]; then rm -fr ~/.bash_history fi

Permalänk
Entusiast

Ett litet tips i all röra
om man lägger in ett inledande mellanslag i kommandot, så kommer kommandot ifråga inte att lagras i historiken. Bra om man skriver känsliga kommandon.

Permalänk
Avstängd
Skrivet av SysGhost:

Ett litet tips i all röra
om man lägger in ett inledande mellanslag i kommandot, så kommer kommandot ifråga inte att lagras i historiken. Bra om man skriver känsliga kommandon.

Tack för tipset. Det får jag hålla i minnet i framtiden. Jag var mest irriterad att ha 500 historiska kommandon med en lista som bara växte. Med ovan lösning är det rent och snyggt varje gång.

En annan fråga är hur man kan exportera dessa inställningar till andra installationer? Att klippa och klistra värden verkar omständligt. Kanske en bash-fil med en massa systemvärdestillägg, eller det finns smartare lösningar? De olika distributionerna använder väl i stort sett samma trädstruktur. Jag har ännu ej hittat "min" distribtion, däremot har jag hittat flera önskvärda inställningar som jag skulle vilja behålla när jag testar olika distros.

Permalänk
Entusiast
Skrivet av wereaz:

Tack för tipset. Det får jag hålla i minnet i framtiden. Jag var mest irriterad att ha 500 historiska kommandon med en lista som bara växte. Med ovan lösning är det rent och snyggt varje gång.

En annan fråga är hur man kan exportera dessa inställningar till andra installationer? Att klippa och klistra värden verkar omständligt. Kanske en bash-fil med en massa systemvärdestillägg, eller det finns smartare lösningar? De olika distributionerna använder väl i stort sett samma trädstruktur. Jag har ännu ej hittat "min" distribtion, däremot har jag hittat flera önskvärda inställningar som jag skulle vilja behålla när jag testar olika distros.

Användarmappen, eller rentav hela /home kan du flytta från distribution till distribution. Dock kan man få nollställa vissa konfigurationer såsom .dbus .config med flera andra dolda mappar om det visar sig att det strular med att importera en användares hem-mapp till en annan distribution. Fast sådant strul är inte så vanligt.

Tips: Lägg /home i en separat partition, som ni helt sonika behåller mellan bytena av distributioner.

Tips 2:
Vill ni inte ha någon kommandohistorik alls, kan ni enkelt lägga till dessa rader i er .bashrc, eller i .profile:

export HISTFILESIZE=0 export HISTSIZE=0 unset HISTFILE

Vill ni bara reducera storleken på histfilen, sänker ni värdet på någon av variablerna HISTSIZE eller HISTFILESIZE.
Exempel:

export HISTFILESIZE=32 export HISTSIZE=32

Detta ger er 32 kommandon/rader i historiken. Allt därutöver förskjuts bakåt i tiden, och enbart de sista 32 raderna/kommandona sparas.
Om dessa variabler inte är satta/exporterade, så är standard 500 rader.

Skillnaden mellan dessa variabler:
HISTFILESIZE : Maximalt antal kommandon/rader som sparas i filen $HISTFILE.
HISTSIZE : Maximalt antal kommandon/rader som hålls i minnet så länge som kommando-sessionen är öppen. Denna kan vara större än HISTFILESIZE ovan.