Vraag In een bash-script wat betekent een punt gevolgd door een spatie en dan een pad?


Ik kwam dit voorbeeld tegen bij het proberen om een ​​usb-apparaat in een openvz-container te plaatsen en ik heb de constructie nog nooit eerder in de tweede regel gezien. Kun je uitleggen wat het betekent?

#!/bin/bash
. /etc/vz/vz.conf

71
2017-12-26 14:56


oorsprong




antwoorden:


Het is een synoniem voor de ingebouwde source. Het zal voer commando's uit van een bestand in de huidige shell, zoals gelezen uit help source of help ..

In jouw geval het bestand /etc/vz/vz.conf wordt uitgevoerd (hoogstwaarschijnlijk bevat het alleen variabeloewijzingen die later in het script zullen worden gebruikt). Het verschilt van het uitvoeren van het bestand met, bijvoorbeeld, /etc/vz/vz.conf in veel opzichten: het meest voor de hand liggende is dat het bestand niet uitvoerbaar hoeft te zijn; dan zul je eraan denken om ermee te werken bash /etc/vz/vz.conf maar dit wordt alleen uitgevoerd in een onderliggend proces en het bovenliggende script ziet geen wijzigingen (bijvoorbeeld van variabelen) die het kind aanbrengt.

Voorbeeld:

$ # Create a file testfile that contains a variable assignment:
$ echo "a=hello" > testfile
$ # Check that the variable expands to nothing:
$ echo "$a"

$ # Good. Now execute the file testfile with bash
$ bash testfile
$ # Check that the variable a still expands to nothing:
$ echo "$a"

$ # Now _source_ the file testfile:
$ . testfile
$ # Now check the value of the variable a:
$ echo "$a"
hello
$

Ik hoop dat dit helpt.


86
2017-12-26 15:01



Gewoon een opmerking: . zal werken in de meeste shells (sh, ash, ksh, etc.), source is specifiek voor bash. - Dmytro Sirenko
@EarlGray source is niet net bash - het is in C-stijl shells (csh, tcsh) - en zsh ook. . werkt in shells in Bourne-stijl waaronder die vermeld. Gezien het feit dat bash een Bourne-achtige schelp is en bijna geen bash-script van niet-triviale complexiteit waarschijnlijk in een shell in C-stijl wordt uitgevoerd, is het waar . moet als veel draaglijker worden beschouwd. Maar bash's source synoniem van . bestaat gedeeltelijk voor portabiliteit. - Eliah Kagan
@EliahKagan ja, je hebt gelijk; het is beter dat te zeggen . is universeel draagbaar en source is wijdverspreid, maar werkt niet in duidelijke taal sh. - Dmytro Sirenko


Wanneer een script wordt uitgevoerd met `bron ', wordt het uitgevoerd in de bestaande shell. Eventuele variabelen die door het script zijn gemaakt of gewijzigd, blijven beschikbaar nadat het script is voltooid.

Syntaxis       . bestandsnaam [argumenten]

  source filename [arguments]

4
2018-04-24 12:39