Kommandoer, som ikke fungerer i script
-
- Indlæg: 889
- Tilmeldt: 19. dec 2008, 15:52
- IRC nickname: Jakob77
Kommandoer, som ikke fungerer i script
Findes der nogle kommandoer, som ikke fungerer i scripts..?
Evt. "history" ..?
Evt. "history" ..?
-
- Admin
- Indlæg: 20878
- Tilmeldt: 15. nov 2009, 15:04
- IRC nickname: AJenbo
- Geografisk sted: Vanløse, København
Re: Kommandoer, som ikke fungerer i script
Har du prøvet?
-
- Indlæg: 889
- Tilmeldt: 19. dec 2008, 15:52
- IRC nickname: Jakob77
Re: Kommandoer, som ikke fungerer i script
AJenbo skrev:Har du prøvet?
Kun indtil jeg blev bekymret for, om elektriske udladninger kunne skade min hardware.
Da gik jeg i stedet ud og satte 100 kartofler.
Det var heller ikke behageligt, men jeg håber, at resultatet kommer til at ligge bedre i maven.
Er der mere, du gerne vil vide, før vi begynder på emnet..?
-
- Admin
- Indlæg: 20878
- Tilmeldt: 15. nov 2009, 15:04
- IRC nickname: AJenbo
- Geografisk sted: Vanløse, København
Re: Kommandoer, som ikke fungerer i script
Pas på med de rigtige forbindelser kan du brænde en computer af med en pose katofler.
-
- Indlæg: 889
- Tilmeldt: 19. dec 2008, 15:52
- IRC nickname: Jakob77
Re: Kommandoer, som ikke fungerer i script
AJenbo skrev:Pas på med de rigtige forbindelser kan du brænde en computer af med en pose katofler.
Jeg tror, det er nemmere at gøre uden, så det vil jeg ikke spilde god mad på.
Er der så mere..? ... så siger du bare til.
-
- Indlæg: 889
- Tilmeldt: 19. dec 2008, 15:52
- IRC nickname: Jakob77
Re: Kommandoer, som ikke fungerer i script
Jeg har en dum fornemmelse af, at der findes nogle kommandoer, som tidligere har fungeret i scripts og som egentlig også burde fungere i dag, men der er af sikkerhedsmæssige grunde tilføjet nogle begrænsninger, og måske er disse begrænsninger ligefrem tabu eller i hvert fald ukendte for de fleste, og måske er de kun midlertidige.?
Og når man ikke er rutineret scriptbygger, så kan der egentlig hurtigt opstå tilstrækkeligt mange andre tvivlsspørgsmål at tage stilling til, og det vil derfor være rart at vide, om man på forhånd er dømt til at løbe panden imod en mur, når man vil scripte en bestemt kommando.
Jeg håber ikke, at jeg har ret i den dumme fornemmelse, og jeg kan heller ikke selv forstå den, så jeg ser frem til at få den aflivet.
Og når man ikke er rutineret scriptbygger, så kan der egentlig hurtigt opstå tilstrækkeligt mange andre tvivlsspørgsmål at tage stilling til, og det vil derfor være rart at vide, om man på forhånd er dømt til at løbe panden imod en mur, når man vil scripte en bestemt kommando.
Jeg håber ikke, at jeg har ret i den dumme fornemmelse, og jeg kan heller ikke selv forstå den, så jeg ser frem til at få den aflivet.
-
- Admin
- Indlæg: 20878
- Tilmeldt: 15. nov 2009, 15:04
- IRC nickname: AJenbo
- Geografisk sted: Vanløse, København
Re: Kommandoer, som ikke fungerer i script
Det virker som tåge snak. Du må i det mindste være lidt konkret. Prøv at vend dig til at forsøge dig lidt frem eller at have et mål inden du efterspørge hjælp.
-
- Indlæg: 2667
- Tilmeldt: 21. nov 2006, 10:06
- Geografisk sted: Fredericia
Re: Kommandoer, som ikke fungerer i script
Da et script blot er en samling af kommandoer, så er der ingen kommandoer der fungerer anderledes i scripts.
Jeg er heller ikke sikker på at jeg forstår spørgsmålet
Jeg er heller ikke sikker på at jeg forstår spørgsmålet
Forfatter til Ubuntuguiden: http://www.vidas.dk/guides/ubuntuguiden.html
Kører LTS udgaverne.
"It's always easy if you know how to do it."
Kører LTS udgaverne.
"It's always easy if you know how to do it."
-
- Indlæg: 889
- Tilmeldt: 19. dec 2008, 15:52
- IRC nickname: Jakob77
Re: Kommandoer, som ikke fungerer i script
thj01 skrev:Da et script blot er en samling af kommandoer, så er der ingen kommandoer der fungerer anderledes i scripts.
Tak for et klart svar.
Men f.eks. dette:
Kode: Vælg alt
#!/bin/bash
history
Jeg får pludselig intet output på skærmen, når "history" køres på denne måde i et script.
Hvorfor ikke..?
-
- Admin
- Indlæg: 20878
- Tilmeldt: 15. nov 2009, 15:04
- IRC nickname: AJenbo
- Geografisk sted: Vanløse, København
Re: Kommandoer, som ikke fungerer i script
Fjern #!/bin/bash
-
- Redaktør
- Indlæg: 4430
- Tilmeldt: 6. jan 2009, 22:01
- Geografisk sted: København
Re: Kommandoer, som ikke fungerer i script
Det er rigtigt nok at kommandoer ikke fungerer anderledes i scripts, men der kan være forskel på det miljø de afvikles i.
I sammenhæng med dit "problem" omkring history er forskellen at et shell script som standard afvikles i en non-interactive shell og den shell du normalt bruger manuelt er "interactive". Det vigtige i denne forbindelse er den forskel, at en interaktiv shell læser .bashrc og .profile. Det gør en ikke-interaktiv shell ikke.
Læs mere om interaktiv/ikke-interaktiv her: http://www.vanimpe.eu/2014/01/18/different-shell-types-interactive-non-interactive-login/
Da det er i .bashrc eller .profile at historik sættes op, har du altså ikke umiddelbart nogen i en ikke-interactive shell.
Fortvivl dog ikke. Som jeg tror jeg har nævnt før ligger din historik jo i en fil i din hjemmemappe der hedder .bash_history. Du kan se den f.eks. med
Derfor kan du jo bruge denne fil i et shell-script og du har måske slet ikke brug for history kommandoen. Det er måske den letteste løsning.
LØSNING 1:
Hvis du insisterer på at være i det rigtige miljø, så du kan bruge history, er et alternativ er at fortælle i starten af dit script at du ønsker at den skal køre interaktivt. Så ville dit script komme til at se ud som følger.
LØSNING 2:
Måske er nedenstående endnu bedre, omend lidt mere ordrigt. Her kører du i en standard ikke-interaktiv shell, men du starter med manuelt at definere hvor din historik fil er gemt og at den skal være "on".
LØSNING 3:
I sammenhæng med dit "problem" omkring history er forskellen at et shell script som standard afvikles i en non-interactive shell og den shell du normalt bruger manuelt er "interactive". Det vigtige i denne forbindelse er den forskel, at en interaktiv shell læser .bashrc og .profile. Det gør en ikke-interaktiv shell ikke.
Læs mere om interaktiv/ikke-interaktiv her: http://www.vanimpe.eu/2014/01/18/different-shell-types-interactive-non-interactive-login/
Da det er i .bashrc eller .profile at historik sættes op, har du altså ikke umiddelbart nogen i en ikke-interactive shell.
Fortvivl dog ikke. Som jeg tror jeg har nævnt før ligger din historik jo i en fil i din hjemmemappe der hedder .bash_history. Du kan se den f.eks. med
Kode: Vælg alt
cat ~/.bash_history
Derfor kan du jo bruge denne fil i et shell-script og du har måske slet ikke brug for history kommandoen. Det er måske den letteste løsning.
LØSNING 1:
Kode: Vælg alt
#!/bin/bash
cat ~/.bash_history
Hvis du insisterer på at være i det rigtige miljø, så du kan bruge history, er et alternativ er at fortælle i starten af dit script at du ønsker at den skal køre interaktivt. Så ville dit script komme til at se ud som følger.
LØSNING 2:
Kode: Vælg alt
#!/bin/bash -i
history
Måske er nedenstående endnu bedre, omend lidt mere ordrigt. Her kører du i en standard ikke-interaktiv shell, men du starter med manuelt at definere hvor din historik fil er gemt og at den skal være "on".
LØSNING 3:
Kode: Vælg alt
#!/bin/bash
HISTFILE=~/.bash_history
set -o history
history
-
- Indlæg: 889
- Tilmeldt: 19. dec 2008, 15:52
- IRC nickname: Jakob77
Re: Kommandoer, som ikke fungerer i script
@zob
Mange tak. Jeg tænkte nok, det var lusket indviklet.
Det bliver det i hvert fald hurtigt, med det script, som jeg prøver på at bygge.
Og jeg vil ellers virkelig gerne, om jeg kan få styr på det, for der er mange flere kommandoer, som jeg for mit vedkommende skønner egnede at lægge ind på den måde.
Jeg gætter på, at alle her i tråden godt kender mønsteret på koden og kan se, hvad det er meningen, den skal gøre, og funktionen ( hvis det engang kommer til at virke ) burde også fremgå af hjælpen:
Men jeg ved ikke rigtig, hvordan jeg med de nye oplysninger skal få orden på alt det kaos.
Jeg kunne måske benytte "call" ( mindes jeg noget, der hedder ) og så bygge et underscript med eget miljø til hver kommando. Det virker bare meget omstændigt, og jeg ved heller ikke, om det vil virke. Alternativt kunne jeg måske gentage mønsteret en gang for hver ekstra linje en kommando betinger, men det går jo nok ikke i dette tilfælde, når hovedscriptet og dets kommandoer kræver to forskellige miljøer. Hmm... der er noget at overveje.
Mange tak. Jeg tænkte nok, det var lusket indviklet.
Det bliver det i hvert fald hurtigt, med det script, som jeg prøver på at bygge.
Og jeg vil ellers virkelig gerne, om jeg kan få styr på det, for der er mange flere kommandoer, som jeg for mit vedkommende skønner egnede at lægge ind på den måde.
Jeg gætter på, at alle her i tråden godt kender mønsteret på koden og kan se, hvad det er meningen, den skal gøre, og funktionen ( hvis det engang kommer til at virke ) burde også fremgå af hjælpen:
Kode: Vælg alt
#!/bin/bash
#Dette script "his.sh" er bygget til at hjælpe tumper med at huske og bruge terminalkommandoen "history" i særlige varianter. Scriptet er inspireret af denne debat: https://ubuntudanmark.dk/forum/viewtopic.php?p=141146#p141146 og videre bearbejdet under dette link https://ubuntudanmark.dk/forum/viewtopic.php?p=141291#p141291
#Scriptet må kopieres, og jo mere det spredes og spreder glæde, jo gladere bliver jeg også. Det er altid på eget ansvar at lave et script ud af min tekst. Går det skidt, er det kopistens egen skyld. Men går det godt, som jeg formoder ( jeg formoder intet på dette stadium, for scriptet er slet ikke færdigt endnu ), må det gerne betragtes, som en hyldest til Ubuntu terminalen og de scripts, som kan gøre de mest utrolige heroglyffer forståelige for almindelige mennesker. Vh Jakob77 :)
if [ -z $1 ]
then
`history &`
elif [ -n $1 ]
then
arg=$1
fi
case $arg in
"one") `history | grep '$2' | wc -l &`;;
"hyplist") `sort ~/.bash_history | uniq -c | sort -n &`;;
"vis") `cat ~/.bash_history &`;;
"-help") echo 'Scriptet er bygget til at hjælpe tumper med at huske og bruge terminalkommandoen "history" Muligheder: Hvor hyppigt er en bestemt kommando anvendt i terminalen -> Syntaks: "his one kommandoen" .... Hitliste over terminalkommandoers anvendelse -> Syntaks: "his hyplist" .... Vis hele kommandohistorien i terminalen ( filen ~/.bash_history vises ) --> Syntaks: "his vis"' ;;
"--help") echo 'Scriptet er bygget til at hjælpe tumper med at huske og bruge terminalkommandoen "history" Muligheder: Hvor hyppigt er en bestemt kommando anvendt i terminalen -> Syntaks: "his one kommandoen" .... Hitliste over terminalkommandoers anvendelse -> Syntaks: "his hyplist" .... Vis hele kommandohistorien i terminalen ( filen ~/.bash_history vises ) --> Syntaks: "his vis"' ;;
"-h") echo 'Scriptet er bygget til at hjælpe tumper med at huske og bruge terminalkommandoen "history" Muligheder: Hvor hyppigt er en bestemt kommando anvendt i terminalen -> Syntaks: "his one kommandoen" .... Hitliste over terminalkommandoers anvendelse -> Syntaks: "his hyplist" .... Vis hele kommandohistorien i terminalen ( filen ~/.bash_history vises ) --> Syntaks: "his vis"' ;;
esac
Men jeg ved ikke rigtig, hvordan jeg med de nye oplysninger skal få orden på alt det kaos.
Jeg kunne måske benytte "call" ( mindes jeg noget, der hedder ) og så bygge et underscript med eget miljø til hver kommando. Det virker bare meget omstændigt, og jeg ved heller ikke, om det vil virke. Alternativt kunne jeg måske gentage mønsteret en gang for hver ekstra linje en kommando betinger, men det går jo nok ikke i dette tilfælde, når hovedscriptet og dets kommandoer kræver to forskellige miljøer. Hmm... der er noget at overveje.
-
- Indlæg: 889
- Tilmeldt: 19. dec 2008, 15:52
- IRC nickname: Jakob77
Re: Kommandoer, som ikke fungerer i script
zob skrev:Fortvivl dog ikke. Som jeg tror jeg har nævnt før ligger din historik jo i en fil i din hjemmemappe der hedder .bash_history. Du kan se den f.eks. medKode: Vælg alt
cat ~/.bash_history
Derfor kan du jo bruge denne fil i et shell-script og du har måske slet ikke brug for history kommandoen. Det er måske den letteste løsning.
Ja, du kan også godt tro, at jeg kredsede om den fil, da scriptet begyndte at drille.
Og selvom det forhåbentlig lykkes at bygge scriptet, som jeg har tænkt det og vil bruge det i mange andre sammenhænge, så kan der stadig være noget interessant at gøre med den fil.
Jeg tror faktisk, at jeg vil skrive min egen, som jeg lægger ind, når jeg installerer styresystem.
Derforuden mere fusket, hvis scriptet glipper, kan jeg måske sende ( pipe ) en kommando oveni listen på en facon evt. med ">". Og derefter vil jeg kun skulle trykke pil op, og så står kommandoen klar i prompten.
Er det noget sikkerhedsmæssigt, der er årsag til, at nogle filer i roden i hjemmemappen hedder .filnavn..?
-
- Admin
- Indlæg: 20878
- Tilmeldt: 15. nov 2009, 15:04
- IRC nickname: AJenbo
- Geografisk sted: Vanløse, København
Re: Kommandoer, som ikke fungerer i script
Nej det er blot for at de er skjulte så du ikke skal se på en lang liste af standard filer når du gerne vil se en liste af de filer du selv har oprettet. Det gæller næsten alle konfigurationsfiler.
Du kan også undlade "#!/bin/bash" i starten af filen så fortsætter scriptet i det miljø hvor det bliver afviklet og der ved fungere de nøjagtig som hvis du selv køre dem.
Du kan også undlade "#!/bin/bash" i starten af filen så fortsætter scriptet i det miljø hvor det bliver afviklet og der ved fungere de nøjagtig som hvis du selv køre dem.
-
- Indlæg: 889
- Tilmeldt: 19. dec 2008, 15:52
- IRC nickname: Jakob77
Re: Kommandoer, som ikke fungerer i script
AJenbo skrev:Du kan også undlade "#!/bin/bash" i starten af filen så fortsætter scriptet i det miljø hvor det bliver afviklet og der ved fungere de nøjagtig som hvis du selv køre dem.
Ja, det forstod jeg godt, og det var også derfor jeg kørte fast med scriptet.
Imidlertid er der nu dukket nye problemer op, fordi, tror jeg nok, det oprindelige scriptmønster, som jeg gerne vil benytte, det har behov for "#!/bin/bash"
Det er derfor, jeg er lidt inde på, om det måske kan blive nødvendigt at benytte underscripts, som kaldes ("call") af moderscriptet og selv aflyser "#!/bin/bash", mens de f.eks. kører en "history" kommando eller en anden (interaktiv?) kommando.
Men det bliver et værre bøvl, og jeg vil helst ikke have så mange små scripts til at ligge i min bin-mappe, og opretter jeg en undermappe, så er der ikke path til den.
Det vil være mere lækkert, hvis det hele kan samles i et enkelt script.
Men der vil nok gå flere år, før jeg er færdig med at plage om koder..
Hvad siger du til, at vi deler opgaven imellem os, jeg skriver hjælpen, og dermed hvad scriptet skal kunne, og så skal du kun skrive koden..?