Jawaban:
Titik dalam konteks itu berarti "sumber" isi file itu ke shell saat ini. Dengan source
sendirinya menjadi perintah builtin shell. Dan source
dan operator dot menjadi sinonim.
Katakanlah saya punya konten berikut dalam sample.sh
file.
$ cat sample.sh
echo "hi"
echo "bye?"
Sekarang ketika saya sumber:
$ . sample.sh
hi
bye?
$
File seperti ini sering digunakan untuk memasukkan perintah pengaturan seperti menambahkan sesuatu ke variabel lingkungan tersebut.
Katakanlah saya punya perintah ini di file lain addvars.sh
,.
$ cat addvars.sh
export VAR1="some var1 string"
export VAR2="some var2 string"
Perhatikan bahwa saya tidak memiliki variabel apa pun di lingkungan shell saya saat ini.
$ env | grep VAR
$
Sekarang ketika saya sumber file ini:
$ . addvars.sh
$
OK, sepertinya tidak melakukan apa-apa, tetapi ketika kami memeriksa env
variabel lagi:
$ env | grep VAR
VAR1=some var1 string
VAR2=some var2 string
Untuk menambah jawaban slm:
Ada dua cara untuk menjalankan skrip shell. Pertama adalah menjalankan skrip dalam proses terpisah, yang berarti apa pun tentang lingkungan shell (status memori) akan kembali ke keadaan shell "parent" sebelum menjalankan proses shell "child".
Sebagai contoh, direktori kerja saat ini (lokasi di sistem file satu berada) ditentukan berdasarkan per proses. Jadi, mari kita buat skrip yang terlihat seperti ini:
#!/bin/bash
cd ~
cd ..
pwd
Jadi, sebut saja skrip ini, oh foo
,. Dan mari kita jalankan skrip ini sebagai berikut:./foo
Kita akan melihat yang berikut ini:
/home
(Penafian standar bahwa ada sejumlah besar Linux dan distribusi klon UNIX lainnya di luar sana, beberapa di antaranya tidak memasukkan direktori pengguna /home
. Atau, seperti yang biasa kami katakan "Jarak tempuh Anda mungkin bervariasi")
Sekarang, setelah menjalankan skrip ini, mari kita ketik perintah ini
pwd
Untuk melihat direktori tempat kita berada. Kita akan melihat sesuatu seperti ini:
/home/username
Alasannya, sekali lagi, skrip shell yang kami jalankan memiliki lingkungannya sendiri (termasuk direktorinya sendiri di mana perintah dijalankan), dan lingkungan itu hilang begitu skrip selesai berjalan.
Sekarang, mari kita jalankan foo
skrip seperti ini
. ./foo
Atau, yang setara:
source ./foo
Jika kita melakukan pwd
setelahnya, kita akan melihat ini:
/home
Alasannya adalah: Sumber skrip tidak memanggil proses terpisah. Ini seperti mengetik semua perintah dalam proses induk dengan tangan; lingkungannya dilestarikan setelah skrip berakhir.
Izinkan saya memberikan contoh yang lebih sederhana. Mari kita buat skrip yang terlihat seperti ini:
#!/bin/bash
exit
Sebut saja foo
. Mari kita pastikan kita bisa menjalankannya: chmod 755 foo
. Lalu, mari kita jalankan seperti ini:
./foo
Tidak ada yang terjadi. Namun, di sisi lain, jika kita melakukan ini:
. ./foo
Atau ini:
source ./foo
Kami keluar.
Titik (titik) adalah singkatan untuk bash bawaan source
. Ini akan membaca dan menjalankan perintah dari file di lingkungan saat ini dan mengembalikan status keluar dari perintah terakhir yang dijalankan. File dapat di direktori saat ini atau di mana saja di PATH
. Tidak perlu dieksekusi.
# type .
. is a shell builtin
# help .
.: . filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
. (sumber atau operator titik)
Baca dan jalankan perintah dari argumen nama file dalam konteks shell saat ini.
Syntax
. filename [arguments]
source filename [arguments]
sumber adalah sinonim untuk titik / titik '.' di bash, tetapi tidak di POSIX sh, jadi untuk kompatibilitas maksimum gunakan periode.
Ketika skrip dijalankan menggunakan sumber yang dijalankan di dalam shell yang ada, variabel apa pun yang dibuat atau dimodifikasi oleh skrip akan tetap tersedia setelah skrip selesai. Sebaliknya jika skrip dijalankan seperti nama file, maka subshell terpisah (dengan seperangkat variabel yang sepenuhnya terpisah) akan muncul untuk menjalankan skrip.
Ada perbedaan tipis antara menjalankan skrip dengan menjalankan .ss64script (dot ss64script) dan. ss64script (dot space ss64script)
yang pertama menjalankan file yang disembunyikan dari perintah 'ls', (walaupun ls -a akan menampilkan file tersembunyi) opsi kedua akan mengeksekusi skrip ss64 bahkan jika belum disetel sebagai executable dengan chmod.
TL; DR
Titik sama dengan perintah sumber.
source adalah perintah Unix yang mengevaluasi file mengikuti perintah, sebagai daftar perintah, dieksekusi dalam konteks saat ini.
Diambil dari https://en.wikipedia.org/wiki/Source_(command)