Vraag Hoe een uitvoerbaar bestand (bijvoorbeeld een .sh-script) te maken, zodat het vanaf de terminal kan worden uitgevoerd


Ik heb een script.sh bestand en het type van dit bestand is shellscript-bestand. Ik wil dit bestand maken als een applicatie / x-uitvoerbaar bestand. Hoe kan ik het halen?


182
2017-12-16 12:27


oorsprong


gerelateerd aan Hoe voer ik .sh-bestanden uit in Terminal? - TuKsn
Mogelijk duplicaat van Hoe voer ik .sh-bestanden uit? - karel
Het is geen duplicaat, omdat ik specifiek heb gevraagd om het application / x-executable te maken. De andere vraag vraagt ​​gewoon om het sh-bestand in terminal te openen. - Ziyaddin Sadigov


antwoorden:


nou je kunt het maken door te doen zoals

chmod +x filename.sh

dus het zal uitvoeren als je het noemt

./filename.sh

en je hebt ook toegang tot dat script als applicatie.

open je terminal en typ zoals hieronder uit je homedirectory.

gedit .bashrc

Typ dit in het geopende bestand op de laatste regel.

alias <Name_with which you wanna call it >='./filename.sh'

opslaan en afsluiten .

Typ dit vervolgens in uw terminal source ~/.bashrc om de aangebrachte wijzigingen toe te passen. typ dan gewoon de naam die je daar hebt gegeven na alias om toegang te krijgen tot je script.

zorg ervoor dat u in de homedirectory bent geplaatst.

anders

alias <Name_with which you wanna call it >='./<path to your script >.sh'

Ik hoop dat het helpt.


244
2017-12-16 12:33



Weet je hoe je sudo commando te gebruiken na het invoeren van de opdracht als: "alias command1 = '/home/user_name/dir/script.sh'. In de mijne, het werkt zonder sudo, maar niet mee. - Aditya
Je moet bash opnieuw opstarten na het bewerken van de .bashrc run: exec bash om bash opnieuw te starten. - Sampath Perera
Waarom is het uitvoerbare bestand dat? ./filename.sh en niet alleen filename.sh? - user1993
@ user1993 ja, ik ben ook op zoek naar een manier om het gewoon uitvoerbaar te maken filename en niet ./filename - MycrofD
@ user1993 Over het algemeen met ./filename.sh specificeert een bestand in de huidige map en gebruikt filename.sh specificeert een bestand in de huidige map of een map van PATH. Het eerste gebruik verwijdert elke onzekerheid over welk bestand wordt geopend. In dit geval probeert u het script uit te voeren met bash of een andere interpreter (op grond van aangenomen #!/bin/bash als eerste regel in je script) door gewoon de bestandsnaam in te voeren. Voor dit gebruik moet de map worden opgegeven. Als alternatief kunt u het proberen bash filename.sh die lijkt te werken met niet-gespecificeerde directory. - a505999


Er zijn twee manieren om een ​​bestand uitvoerbaar te maken:

GUI-methode:

Ga naar het tabblad Rechten en vink het vakje `Execute: [] Uitvoerbestand als programma toestaan ​​aan.

enter image description here

Terminal / opdrachtmethode:

U kunt ofwel:

cd /to/my/required/directory

Ren dan

chmod +x filename.extension

Of ren gewoon:

chmod +x /path/to/your/filename.extension

chmod heeft ook wat meer geavanceerde opties:

De spaties moeten laten zien dat het is opgesplitst: - rwx --- ---

De eerste set --- is Gebruiker. De tweede is Groep en de laatste is Andere (iemand anders)

r staat voor Read, w voor Write en x voor eXecute.

Dus iedereen toestaan ​​om het te lezen, maar alleen de uit te voeren groep en de gebruiker om het te lezen en te schrijven (maar om wat voor reden dan ook niet uitvoeren) zou zijn:

-rw- rx- r-- Maar dit zou aan het commando worden toegevoegd als:

chmod +rw-rx-r-- /path/to/file.extension

chmod kan dit ook in aantallen doen. Het is gebaseerd op binair (ik denk, want het is 1,2 en 4)

Dus er zijn deze nummers:

Uitvoeren door gebruiker is 100. Uitvoeren per groep is 010. Uitvoeren door andere is 001

Schrijven door gebruiker is 200. Schrijven per groep is 020. Schrijven door een ander is 002.

Lezen door gebruiker is 400. Lezen per groep is 040. Lezen door andere is 004.

Voeg deze dan samen toe om de gewenste combinatie te krijgen.

Dus iedereen toestaan ​​om het te lezen, maar alleen de uit te voeren groep en de gebruiker om het te schrijven (maar om wat voor reden dan ook niet uitvoeren) zou zijn:

400 + 040 + 004 en 010 en 200

Dat komt neer op 600 + 050 + 004 = 654.

U kunt dan de opdracht uitvoeren.

chmod +654 /path/to/file.extension om het in te stellen.

En om alle rechten in te stellen, kunt u typen:

chmod +rwxrwxrwx /path/to/file.extension

Of (dit is een beetje makkelijker om te schrijven, maar moeilijker om ze allemaal te onthouden):

chmod +777 /path/to/file.extension

Eindelijk, kunt u doen:

chmod -777 /path/to/file.extension

Alle rechten van iedereen verwijderen.

En:

chmod +300 /path/to/file.extension

Om lezen en schrijven voor de gebruiker toe te voegen, zonder invloed op andere machtigingen (bijvoorbeeld Execute permissies).

Deze website heeft een heel handig selectievakje voor kleine rasters, waarbij je de gewenste opties kunt aanvinken en je de opdracht krijgt:

enter image description here

Niet alle mogelijke combinaties zijn echter verstandig om te gebruiken; de belangrijkste die worden gebruikt, zijn de volgende:

755 - Owner heeft alles, en Group en Other kan lezen en uitvoeren

700 - Owner heeft alles

644 - Owner kan lezen en schrijven, en Group en Otherkunnen lezen

600 - Owner kan lezen en schrijven

En, als u niet-triviale gebruikersgroepen gebruikt:

775 - Owner kan lezen en schrijven, en Group en Otherkunnen lezen

770 - Owner en Group hebben allemaal, en Other kan lezen en uitvoeren

750 - Owner heeft alles, en Group kan lezen en uitvoeren

664 - Owner en Group kan lezen en schrijven, en Other kan gewoon lezen

660 - Owner en Group kan lezen en schrijven

640 - Owner kan lezen en schrijven, en Groupkunnen lezen

777 en 666 worden zelden gebruikt, behalve in / tmp.

Bedankt Ilmari Karonen voor erop wijzen degenen die veel worden gebruikt!


31
2018-06-18 12:22



Is het niet gebaseerd op octaal (8-base) in plaats van binair (2-gebaseerd)? In binair getal kunt u alleen 0 en 1 hebben, terwijl u in octaal 0, 1, ... 6, 7 kunt hebben - Justinas
@Justinas binair in die zin dat 7 = 4 + 2 + 1 - 111 staat voor Read en Write and Execute. - Tim


Rennen:

chmod +x /path/to/file.sh

Voer het volgende uit om het onuitvoerbaar te maken:

chmod -x /path/to/file.sh

Ik heb bijvoorbeeld gemaakt .sh het dossier:

vi tester12.sh

Nadat ik een code heb geschreven in de vi-editor, verlaat ik de vi-editor:

:wq!
chmod +x tester12.sh
./tester12.sh

7
2018-06-18 12:39