Kommandoer, som ikke fungerer i script

Dette forum bruges på EGET ANSVAR til at lege med scripts og andre ting med risiko for at beskadige sit eget og andres systemer.
Jakob77
Indlæg: 889
Tilmeldt: 19. dec 2008, 15:52
IRC nickname: Jakob77

Kommandoer, som ikke fungerer i script

Indlæg af Jakob77 »

Findes der nogle kommandoer, som ikke fungerer i scripts..?

Evt. "history" ..?
AJenbo
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

Indlæg af AJenbo »

Har du prøvet?
Jakob77
Indlæg: 889
Tilmeldt: 19. dec 2008, 15:52
IRC nickname: Jakob77

Re: Kommandoer, som ikke fungerer i script

Indlæg af Jakob77 »

AJenbo skrev:Har du prøvet?


Kun indtil jeg blev bekymret for, om elektriske udladninger kunne skade min hardware.
sky.gif
sky.gif (12.71 KiB) Vist 1560 gange



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..? ;)
AJenbo
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

Indlæg af AJenbo »

Pas på med de rigtige forbindelser kan du brænde en computer af med en pose katofler.
Jakob77
Indlæg: 889
Tilmeldt: 19. dec 2008, 15:52
IRC nickname: Jakob77

Re: Kommandoer, som ikke fungerer i script

Indlæg af Jakob77 »

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 mere..? ... så siger du bare til. :)
Jakob77
Indlæg: 889
Tilmeldt: 19. dec 2008, 15:52
IRC nickname: Jakob77

Re: Kommandoer, som ikke fungerer i script

Indlæg af Jakob77 »

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.
AJenbo
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

Indlæg af AJenbo »

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.
thj01
Indlæg: 2667
Tilmeldt: 21. nov 2006, 10:06
Geografisk sted: Fredericia

Re: Kommandoer, som ikke fungerer i script

Indlæg af thj01 »

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
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."
Jakob77
Indlæg: 889
Tilmeldt: 19. dec 2008, 15:52
IRC nickname: Jakob77

Re: Kommandoer, som ikke fungerer i script

Indlæg af Jakob77 »

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..?
AJenbo
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

Indlæg af AJenbo »

Fjern #!/bin/bash
zob
Redaktør
Indlæg: 4430
Tilmeldt: 6. jan 2009, 22:01
Geografisk sted: København

Re: Kommandoer, som ikke fungerer i script

Indlæg af zob »

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

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
Jakob77
Indlæg: 889
Tilmeldt: 19. dec 2008, 15:52
IRC nickname: Jakob77

Re: Kommandoer, som ikke fungerer i script

Indlæg af Jakob77 »

@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:


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. :)
Jakob77
Indlæg: 889
Tilmeldt: 19. dec 2008, 15:52
IRC nickname: Jakob77

Re: Kommandoer, som ikke fungerer i script

Indlæg af Jakob77 »

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. 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.


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..?
AJenbo
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

Indlæg af AJenbo »

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.
Jakob77
Indlæg: 889
Tilmeldt: 19. dec 2008, 15:52
IRC nickname: Jakob77

Re: Kommandoer, som ikke fungerer i script

Indlæg af Jakob77 »

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..? :D