Home
» MAC OS X
»
Hoe voer je Terminal-opdrachten uit vanuit een script op macOS?
Hoe voer je Terminal-opdrachten uit vanuit een script op macOS?
Om Terminal-opdrachten vanuit een script op macOS uit te voeren, plaatst u ze in een shellscript in platte tekst, maakt u het uitvoerbaar en voert u het vervolgens uit vanuit Finder of Terminal. Gebruik een .commandextensie om het te openen door erop te dubbelklikken. Een script omzeilt de privacyinstellingen van macOS niet en verleent geen beheerdersrechten.
Een kort shellscript begint met een shebang die zsh selecteert.
1. Schrijf de opdrachten in een platte tekstbestand.
Een shellscript is een tekstbestand met opdrachten. Begin het met een shebang , de eerste regel die macOS vertelt welke shell het bestand moet interpreteren. De huidige standaard shell voor nieuwe Terminal-vensters is zsh, hoewel een beheerder een andere standaard shell kan instellen, zoals Apple uitlegt in de Terminal-handleiding . Dit voorbeeld gebruikt expliciet zsh:
#!/bin/zsh
# Print a message when the script runs
echo "Script is running"
Plaats opdrachten op aparte regels onder de shebang. De shebang kiest de interpreter, dus gebruik de syntaxis die deze ondersteunt; een Bash-script kan bijvoorbeeld beginnen met . De shellscript-handleiding#!/bin/bash van Apple legt de basisprincipes uit.
Je kunt TextEdit gebruiken, maar zorg ervoor dat het bestand platte tekst is: nieuwe TextEdit-documenten kunnen opgemaakte tekst bevatten. Kies 'Opmaak' > 'Platte tekst' of stel de documentindeling van TextEdit in op 'Platte tekst' in de instellingen. Opmaak met opmaak is geen shellcode. Apple beschrijft deze opties in de TextEdit-handleiding . Een code-editor of een opdrachtregel-editor nanowerkt ook.
Sla het script op met de extensie .command op een locatie die je gemakkelijk kunt terugvinden.
2. Sla het op met een .commandextensie
Sla het platte tekstbestand op met een beschrijvende naam, bijvoorbeeld MyScript.command. De extensie zorgt ervoor dat Finder het script in Terminal kan openen wanneer je erop dubbelklikt. De gearchiveerde ontwikkelaarsdocumentatie van Apple beschrijft deze dubbelklik-workflow voor shellscripts. Controleer de uiteindelijke naam in Finder: als deze eindigt op .command.txt, hernoem het bestand dan zodat de uiteindelijke extensie alleen is .command. Bewaar het voorbeeldbestand op een locatie zoals je bureaublad terwijl je het instelt.
Als macOS vraagt welke extensie te gebruiken, laat het bestand dan staan .commanden controleer of Finder deze niet heeft toegevoegd .txt.
3. Maak het script uitvoerbaar
Open Terminal en geef je account toestemming om het bestand uit te voeren. Voor het voorbeeld dat op het bureaublad is opgeslagen, voer je het volgende in:
chmod u+x "$HOME/Desktop/MyScript.command"
Druk op Enter. u+xHiermee wordt de eigenaar uitvoerrechten gegeven; aanhalingstekens beschermen paden met spaties. Vervang het voorbeeldpad indien nodig. Sleep het bestand naar Terminal of gebruik het Option-klikmenu van Finder om het pad te kopiëren. Apple laat dezelfde methode zien in de instructies voor uitvoerbare bestanden .
Het commando `chmod` geeft de eigenaar van het bestand uitvoerrechten.
4. Voer het script uit
Dubbelklik MyScript.commandin Finder om het in Terminal uit te voeren. De uitvoer en eventuele fouten verschijnen daar. Of voer het volledige pad in:
"$HOME/Desktop/MyScript.command"
Of ga eerst naar de map en voeg vervolgens een dubbele punt (:) toe aan de bestandsnaam ./.
cd "$HOME/Desktop"
./MyScript.command
Dit commando geeft de shell de opdracht om een bestand in de huidige map uit te voeren. De Terminal-handleiding./ van Apple legt uit hoe je een uitvoerbaar bestand kunt starten aan de hand van het pad.
Voer het bestand uit via het opgegeven pad en controleer de uitvoer in de terminal.
Los veelvoorkomende fouten op
"Toegang geweigerd": Controleer of u chmod u+xhet juiste bestand hebt geopend. Herhaal de opdracht indien nodig met het exacte pad naar het bestand. Het uitvoerbaar maken van een bestand betekent niet dat elke opdracht in dat bestand uitvoerbaar is.
"Bestand of map bestaat niet": Controleer de locatie en de spelling, inclusief de extensie. Een bestand dat per ongeluk is opgeslagen, MyScript.command.txtkomt niet overeen met de bovenstaande opdracht. Het bestand naar Terminal slepen kan helpen om het pad in te voeren.
Een commando werkt wanneer het wordt ingetypt, maar niet in het script: het script kan een andere shell gebruiken of afhankelijk zijn van aliassen, omgevingsvariabelen of een werkmap uit je interactieve Terminal-sessie. Gebruik de juiste shebang, vermijd het gebruik van aliassen en geef bestandspaden expliciet op. Als de commando's een specifieke map nodig hebben, voeg dan een relevante cdregel toe aan het begin van het script.
Zorg dat je de gebruiksrechten begrijpt voordat je iets deelt.
De uitvoerrechten staan los van de privacyrechten. Een script wordt normaal gesproken uitgevoerd onder uw account; gebruik deze rechten sudoalleen voor opdrachten die beheerdersrechten vereisen.
macOS kan toegang vragen tot beveiligde mappen of andere apps. Bekijk elk verzoek en sta alleen toe wat nodig is. Controleer het Apple-menu > Systeeminstellingen > Privacy en beveiliging voor bestanden en mappen en de bijbehorende privacyinstellingen . Goedkeuringen zijn afhankelijk van de gevraagde toegang en de aanvragende app; het zijn geen algemene machtigingen per opdracht en ze worden niet gedeeld met een script.
Voordat je een script uitvoert of deelt, lees dan elke regel en zorg ervoor dat je begrijpt wat er wordt gewijzigd. Een .commandbestand is handig omdat het direct kan worden uitgevoerd zodra je het opent, dus gebruik alleen bestanden van bronnen die je vertrouwt.