Vraag Moet ik mijn scripts opslaan met de .sh-extensie?


Ik heb een paar functionele scripts en wil deze kopiëren /usr/bin Ik wil ze gebruiken als normale terminalopdrachten. Is het een goede gewoonte om ze te gebruiken met de .sh extensie of kan ik ze opslaan zonder extensie?


54
2017-07-26 22:48


oorsprong


Ga je ze verspreiden? - muru
Nee, het is voor mijn eigen gebruik. - Patterson
Ook als u wilt dat die scripts beschikbaar zijn voor alle gebruikers, /usr/local/bin kan een betere keuze zijn. - Salem
@Salem /usr/bin en /usr/local/bin moeten beide beschikbaar zijn voor alle gebruikers, maar /usr/local/bin is beter voor uitvoerbare bestanden die geen deel uitmaken van pakketten. - gerrit
@rath Ik krijg syntax highlighting zonder de extensie als ik de shebang heb ingesteld op #!/usr/bin/env bash of #!/bin/bash. - Sparhawk


antwoorden:


Nee, het is geen goede gewoonte, je moet je scripts zonder extensie houden. Merk op dat scripts die deel uitmaken van pakketten geen a hebben .sh uitbreiding, i.e. -update-grub, niet update-grub.sh. Als je nog steeds niet overtuigd bent, wees dan geadviseerd, dat Google Shell Style Guide zegt:

Uitvoerbare bestanden mogen geen extensie hebben (sterk de voorkeur) of een .sh-extensie. Bibliotheken moeten een .sh-extensie hebben en mogen niet uitvoerbaar zijn.

PS Je hoeft je script niet in te voeren /bin. U kunt een map maken ~/bin en zet je script daar. directory ~/bin is opgenomen in $PATH Standaard kunnen scripts die daar worden geplaatst, worden uitgevoerd als elke andere shell-opdracht.


64
2017-07-26 23:00



"Directory ~ / bin is opgenomen in $PATH standaard" - Sinds wanneer? Hoe dan ook, ~/.local/bin is waarschijnlijk een betere keuze omdat het een standaard is. - nyuszika7h
Je bedoelt "Bibliotheken moeten een .so extensie hebben", toch? Niet sh. - Keith Wolters
@KeithWolters eerst, ik niet, maar Google. Ten tweede, .sh, niet .so, we hebben het over shellscripts, geen binaire bestanden.
De Google-stijlgids is heel specifiek voor Google. Bijvoorbeeld: "Bash is de enige shell-scriptingtaal die is toegestaan ​​voor uitvoerbare bestanden." Het is duidelijk een interne regel in plaats van beste praktijken. - Paul Draper
@ nyuszika7h check ~ / .profile ... het voegt $ HOME / bin in je pad in als de map bestaat - Corey Goldberg


Ik heb de aanbeveling om te gebruiken geschrapt ~/bin welke automatisch aan je wordt toegevoegd $PATH,als Sergey zei. Of /usr/local/bin, die mogelijk al op de PATH. Echter:

  • Je doet dit voor jezelf. Gebruik waar je je prettig bij voelt. Inderdaad, ik zou zeggen de extensie behouden, zodat u eraan herinnerd wordt dat het uw script is dat u gebruikt, omdat -
  • Extensies zijn zeldzaam in /usr/bin. In mijn systeem kan ik er maar twee vinden:

    $ dpkg -S `ls /usr/bin/*.sh`
    mtools: /usr/bin/amuFormat.sh
    gettext-base: /usr/bin/gettext.sh
    

    Dus als u een verpakking gebruikt, laat dan zeker de extensie weg.


8
2017-07-26 23:05



~/binis toegevoegd aan de $PATH automatisch als het bestaat, niet nodig om het handmatig toe te voegen. Maak gewoon de directory aan, log uit en log weer in. - Sergey


Plaats de volgende regel bovenaan het bestand:

#!/bin/bash

Dus dat bestand zal automatisch typen: Shell Script zonder enige extensie!

Vergeet niet om uitvoeringsrechten te geven voor het bestand.

Ga voor het plaatsen van een script - dat kan worden uitgevoerd door directe opdracht naar: Waar moet ik mijn script plaatsen zodat ik het kan uitvoeren met een direct commando?


5
2017-07-27 05:39



Of zelfs gewoon #! / Bin / sh als je de volledige bash-shell niet nodig hebt. - flickerfly