Hoe voer ik een bash-script uit in Terminal?

Ik heb een bash-script zoals:

#!/bin/bash
echo Hello world!

Hoe voer ik dit uit in Terminal?


Antwoord 1, autoriteit 100%

$prompt: /path/to/scripten druk op enter. Merk op dat u ervoor moet zorgen dat het script uitvoeringsrechten heeft.


Antwoord 2, autoriteit 93%

Nog een andere manier om het uit te voeren (deze keer zonder uitvoerrechten in te stellen):

bash /path/to/scriptname

Antwoord 3, autoriteit 58%

cd naar de map die het script bevat, of plaats het in een bin-map die zich in uw $PATH bevindt

typ dan

./scriptname.sh

indien in dezelfde map of

scriptname.sh

als het in de bin-map staat.


Antwoord 4, autoriteit 43%

Je zou kunnen doen:
sh scriptname.sh


Antwoord 5, autoriteit 28%

Eerst moet je het uitvoerbaar maken met: chmod +x name_of_your_file_script.

Nadat je het uitvoerbaar hebt gemaakt, kun je het uitvoeren met ./same_name_of_your_file_script


Antwoord 6, autoriteit 28%

Dit is een oud draadje, maar ik kwam het tegen en het verbaast me dat nog niemand een volledig antwoord heeft gegeven. Dus hier komt…

De zelfstudie over het uitvoeren van een opdrachtregelscript!

V:Hoe voer ik dit uit in Terminal?

Het antwoord staat hieronder, maar eerst … als je deze vraag stelt, zijn hier nog een paar andere weetjes om je op weg te helpen:

Verwarring en conflicten:

Het pad

  • Inzicht in Het pad(toegevoegd door tripleeevoor de volledigheid) is belangrijk. Het “pad” klinkt als een Zen-achtige hacker koanof zoiets, maar het is gewoon een lijst van mappen (mappen) die automatisch worden doorzocht wanneer een onbekende opdracht wordt ingetypt bij de opdrachtprompt. Sommige commando’s, zoals lskunnen ingebouwd zijn, maar de meeste commando’s zijn eigenlijk aparte kleine programma’s. (Dit is waar de “Zen of Unix”binnenkomt … “(i) Zorg ervoor dat elk programma éénding goed doet.”)

Extensies

  • In tegenstelling tot de oude DOS-opdrachtprompts die veel mensen onthouden, heb je geeneen ‘extensie’ nodig (zoals .sh of .py of iets anders), maar het helpt om dingen bij te houden. Het is er eigenlijk alleen voor mensen om als referentie te gebruiken en de meeste commandoregels en programma’s zullen er niets om geven. Het zal geen pijn doen. Als de scriptnaam echter een extensie bevat, moet u deze gebruiken. Het maakt deel uit van de bestandsnaam.

Mappen wijzigen

  • Je hoeft nietom welke reden dan ook in een bepaalde directory te zijn. Maar als de map niet op het pad staat (typ echo $PATHom te zien), dan moet u deze wel opnemen. Als u een script vanuit de huidige map wilt uitvoeren, gebruikt u daarvoor ./. Dit ./ding betekent ‘hier in de huidige map’.

De programmanaam typen

  • U hoeft nietde naam in te typen van het programma dat het bestand uitvoert (BASH of Python of wat dan ook), tenzij u dat wilt. Het kan geen kwaad, maar er zijn een paar momenten waarop u iets andere resultaten krijgt.

SUDO

  • Je hebt geensudonodig om dit te doen. Dit commando is gereserveerd voor het uitvoeren van commando’s als een andere gebruiker of een ‘root’ (beheerder) gebruiker. Het uitvoeren van scripts met sudozorgt voor een veel groter risico om dingen te verknoeien. Dus als je de exacte reden voor het gebruik van sudoniet weet, gebruik het dan niet. Geweldige post hier.

Scriptlocatie …

  • Een goede plek om je scripts te plaatsen is in je ~/bin map.
  • Je kunt er komen door te typen
# A good place to put your scripts is in your ~/bin folder.
> cd ~/bin # or cd $HOME/bin
> ls -l

U ziet een vermelding met eigenaren en machtigingen. U zult merken dat u alle bestanden in deze map ‘bezit’. Je hebt volledige controle over deze map en niemand anders kan deze gemakkelijk wijzigen.

Als het niet bestaat, kun je er een maken:

> mkdir -p ~/bin && cd ~/bin
> pwd
/Users/Userxxxx/bin

A:Om “dit script uit te voeren” vanaf de terminal op een Unix/Linux-systeem, moet je drie dingen doen:

1. Vertel het systeem de locatie van het script. (kies er een)

# type the name of the script with the full path
> /path/to/script.sh
# execute the script from the directory it is in
> ./script.sh
# place the script in a directory that is on the PATH
> script.sh
# ... to see the list of directories in the path, use:
> echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# ... or for a list that is easier to read:
> echo -e ${PATH//:/\\n}
# or
> printf "%b" "${PATH//:/\\n}"
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin

2. Vertel het systeem dat het script toestemming heeft om uit te voeren. (kies er een)

# set the 'execute' permissions on the script
> chmod +x /path/to/script.sh
# using specific permissions instead
# FYI, this makes these scripts inaccessible by ANYONE but an administrator
> chmod 700 /path/to/script.sh
# set all files in your script directory to execute permissions
> chmod +x ~/bin/*

Er is een geweldige discussie over machtigingen met een coole grafiek hier.

3. Vertel het systeem het type script. (kies er een)

  • Typ de naam van het programma vóór het script. (Opmerking: bij gebruik van deze methode is het uitvoeren (chmod-ding hierboven) niet vereist
> bash /path/to/script.sh
... 
> php /path/to/script.php
... 
> python3 /path/to/script.py
...
  • Gebruik een shebang, die ik zie dat je hebt (#!/bin/bash) in je voorbeeld. Als je dat als de eerste regel van je script hebt, zal het systeem dat programma gebruiken om het script uit te voeren. U hoeft geen programma’s te typen of extensies te gebruiken.
  • Gebruik een “draagbare” shebang. U kunt het systeem ook de versie van het programma laten kiezen die als eerste in het PATHstaat door #!/usr/bin/envte gebruiken gevolgd door de programmanaam (bijv. #!/usr/bin/env bashof #!/usr/bin/env python3). Er zijn voor- en nadelen, zoals grondig besproken hier.

Opmerking: deze “draagbare” klootzak is misschien niet zo draagbaar als het lijkt. Zoals met alles van meer dan 50 jaar oud en doordrenkt van talloze opties die nooit helemaal werken zoals je ze verwacht … is er een verhit debat. De meest recente die ik zag en die eigenlijk heel anders is dan de meeste ideeën, is de “draagbare” perl-bang:

#!/bin/sh
exec perl -x "$0" "$@"
#!perl

Antwoord 7, autoriteit 22%

Verander uw directory in waar het script zich bevindtmet behulp van de opdracht cd

Typ vervolgens

bash program-name.sh

Antwoord 8, autoriteit 5%

En nog een andere manier

. /path/to/script

Wat is de betekenis van de stip?


Antwoord 9

Als u zich in een map of map bevindt waar het scriptbestand beschikbaar is, wijzigt u eenvoudig de bestandsmachtiging in de uitvoerbare modus door

te doen

chmod +x your_filename.sh

Daarna voer je het script uit met de volgende opdracht.

$ sudo ./your_filename.sh

boven de “.” vertegenwoordigen de huidige map.
Opmerking!
Als u niet in de map bent waar het BASH-scriptbestand aanwezig is, wijzigt u de map waarbij het bestand zich bevindt door

te gebruiken

cd Directory_name/write the complete path

opdracht. Anders kan uw script niet worden uitgevoerd.

Other episodes