Apa perbedaan antara "sumber" dan "."

147

Apa perbedaan antara menjalankan skrip (misalnya / beberapa / skrip) dengan source /some/scriptdan . /some/scriptdi Bash?

binW
sumber

Jawaban:

134

sourcedan .identik di Bash .

Bagi siapa saja yang mungkin ingin memverifikasi bahwa perintah itu hanya sinonim dan tidak lebih, lihat kode sumber , katakan untuk versi 4.3, dan periksa file builtins/source.def. Anda akan membaca bahwa kedua built-in perintah, sourcedan ., menggunakan fungsi yang sama: source_builtin.

kiamlaluno
sumber
dimana ini didefinisikan? Maksud saya adalah. alias untuk sumber atau ini hal lain?
binW
hal yang persis sama
12
@binW: .adalah perintah sumber tradisional, yang diwarisi dari shell bourne kuno. sourcehanyalah bash builtin yang melakukan persis sama ., mungkin karena itu lebih mudah dibaca ( .sendirian mungkin sulit dikenali dengan font kecil). Anda akan melihat help sourcedan help .menampilkan info yang sama.
geirha
3
@binW: Jika Anda mencari man bashdan kemudian mencari sourceAnda akan melihat bahwa itu source filename [arguments]adalah sinonim untuk . filename [arguments].
Matthew Rankin
46

.identik dengan sourcedalam bash, tetapi tidak dalam POSIX sh, jadi Anda harus menggunakan .jika skrip Anda dijalankan oleh / bin / sh. Perhatikan bahwa bash mengklaim berjalan seperti POSIX sh ketika dipanggil sebagai / bin / sh, tetapi menerima sourcetanpa keluhan.

Perilaku ini telah menggigit saya, skrip diuji dengan bash sebagai / bin / sh gagal ketika dijalankan di bawah abu, misalnya.

jjg
sumber
16
POSIX tidak membatasi shell. POSIX hanya mengatakan; shell harus mendukung setidaknya fitur ini dan itu. Jadi shell POSIX bebas untuk mengimplementasikan fitur-fitur tambahan selama yang dijelaskan oleh POSIX diimplementasikan. Ketika shebang mengatakan #!/bin/shAnda tidak boleh menganggap shell mendukung apa pun kecuali fitur POSIX. pubs.opengroup.org/onlinepubs/9699919799/utilities/…
geirha
Anda mungkin terpengaruh oleh urutan pencarian nama: unix.stackexchange.com/q/17815/8250
Lekensteyn
3
Jawaban ini membantu saya, karena sh sering digunakan dalam cron.
dfrankow