GNU/Linux >> Linux Esercitazione >  >> Linux

La differenza tra l'approvvigionamento ("." O "sorgente") ed eseguire un file in Bash?

Qual è la differenza tra l'esecuzione di uno script come questo:

./test.sh

ed eseguire uno script come questo:

. test.sh ?

Ho provato un semplice script a due righe per vedere se riuscivo a trovare se c'era una differenza:

#!/bin/bash
ls

Ma entrambi . test.sh e ./test.sh ha restituito le stesse informazioni.

Risposta accettata:

./test.sh esegue test.sh come programma separato. Potrebbe essere uno script bash, se il file test.sh inizia con #!/bin/bash . Ma potrebbe essere qualcos'altro.

. ./test.sh esegue il codice del file test.sh all'interno dell'istanza in esecuzione di bash. Funziona come se il file di contenuto test.sh era stato incluso testualmente al posto del . ./test.sh linea. (Quasi:ci sono alcuni dettagli che differiscono, come il valore di $BASH_LINENO e il comportamento del return integrato.)

source ./test.sh è identico a . ./test.sh in bash (in altre shell, source potrebbe essere leggermente diverso o non esistere del tutto; . per l'inclusione è nello standard POSIX).

La differenza più comunemente visibile tra l'esecuzione di uno script separato con ./test.sh e includendo uno script con il . builtin è che se il test.sh script imposta alcune variabili di ambiente, con un processo separato viene impostato solo l'ambiente del processo figlio, mentre con l'inclusione di script viene impostato l'ambiente dell'unico processo shell. Se aggiungi una riga foo=bar in test.sh e echo $foo alla fine dello script di chiamata, vedrai la differenza:

$ cat test.sh
#!/bin/sh
foo=bar
$ ./test.sh
$ echo $foo

$ . ./test.sh
$ echo $foo
bar

Linux
  1. In che modo Linux gestisce più separatori di percorsi consecutivi (/home////nomeutente///file)?

  2. La differenza tra l'approvvigionamento ("." O "sorgente") ed eseguire un file in Bash?

  3. Qual è la differenza tra &> e >&in bash?

  4. Differenza tra /bin e /usr/bin

  5. Qual è la differenza tra /tmp e /run?

La differenza tra più, meno e la maggior parte dei comandi

La differenza tra "du -sh *" e "du -sh ./*"?

La differenza tra .exrc e .vimrc?

La differenza tra '$ . Foo' E '$ ./foo'??

Comprendere i file /proc/mounts, /etc/mtab e /proc/partitions

Linux:differenza tra /dev/console , /dev/tty e /dev/tty0