Vraag Wat is het verschil tussen "source" en "."?


Wat is het verschil tussen het uitvoeren van een script (bijvoorbeeld / some / script) met source /some/script en . /some/script in Bash?


136
2018-02-09 17:18


oorsprong




antwoorden:


source en . zijn synoniemen in Bash.

Voor iedereen die zou willen verifiëren dat de commando's gewoon synoniemen zijn en niets meer, kijk naar de broncode, bijvoorbeeld voor versie 4.3, en bekijk het bestand builtins/source.def. Je zult lezen dat beide ingebouwde commando's, source en ., gebruik dezelfde functie: source_builtin.


123
2018-02-09 17:26



waar is dit gedefinieerd? Ik bedoel is. een alias voor de bron of is dit iets anders? - binW
exact hetzelfde
@binW: . is de traditionele bronopdracht, overgenomen van de oude bourne-schaal. source is gewoon een bash gebouwd die precies hetzelfde doet als ., vermoedelijk omdat het leesbaarder is (a . alleen kan moeilijk te herkennen zijn met een klein lettertype). Je zult het zien help source en help . toont dezelfde info. - geirha
@binW: als je kijkt man bash en zoek dan naar source dat zal je zien source filename [arguments] is een synoniem voor . filename [arguments]. - Matthew Rankin
Dit is eigenlijk in tegenspraak met wat ik zie in deze vraag: askubuntu.com/questions/182012/... - ysap


. is synoniem met source in bash, maar niet in POSIX sh, dus je zou moeten gebruiken . als uw script wordt uitgevoerd door / bin / sh. Merk op dat bash beweert te draaien zoals POSIX sh wanneer hij wordt aangeroepen als / bin / sh, maar accepteert source zonder klacht.

Dit gedrag heeft me gebeten, scripts getest met bash als / bin / sh mislukken wanneer ze onder as worden uitgevoerd, bijvoorbeeld.


41
2018-02-09 20:42



POSIX beperkt de shell niet. POSIX zegt gewoon; de schaal ondersteunt ten minste dit en dat kenmerk. Het is dus een POSIX-shell vrij om extra functies te implementeren, zolang degene die door POSIX zijn beschreven, zijn geïmplementeerd. Wanneer de shebang zegt #!/bin/sh je moet nooit aannemen dat de shell allesbehalve POSIX-functies ondersteunt. pubs.opengroup.org/onlinepubs/9699919799/utilities/... - geirha
U wordt mogelijk getroffen door de volgorde waarin de namen opzoeken: unix.stackexchange.com/q/17815/8250 - Lekensteyn
Dit antwoord heeft me geholpen, omdat sh vaak in cron wordt gebruikt. - dfrankow