OK, jadi source
jalankan skrip di shell saat ini dan .
secara terpisah, seperti yang dijelaskan dalam menjalankan skrip dengan "." Dan dengan "sumber" misalnya, tetapi, khususnya, di .bashrc
file saya , saya punya:
[ -f ~/.bash_aliases ] && source ~/.bash_aliases
[ -f ~/.git-completion.bash ] && source ~/.git-completion.bash
[ -s ~/.autojump/etc/profile.d/autojump.sh ] && source ~/.autojump/etc/profile.d/autojump.sh
Bisakah saya ganti ini dengan:
[ -f ~/.bash_aliases ] && . ~/.bash_aliases
[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash
[ -s ~/.autojump/etc/profile.d/autojump.sh ] && . ~/.autojump/etc/profile.d/autojump.sh
Apakah itu akan berfungsi pada OS X - apakah itu masalah "POSIX"?
Saya mencobanya dan di atas sepertinya masih berfungsi di Ubuntu (jadi mereka benar-benar bekerja dengan keduanya source
dan .
, yaitu, mereka memberi saya fungsionalitas yang diinginkan di shell). Haruskah saya memilih satu dari yang lain, atau saya kehilangan sesuatu?
FWIW, pada OS X, saya sumber .bashrc
dari saya .bash_profile
.
source
menjalankan skrip di shell saat ini dan.
secara terpisah"? Mereka berdua menjalankannya di shell saat ini; kalau tidak, tidak akan ada gunanyaJawaban:
Ini adalah definisi POSIX ini dari
.dot
:Mempertimbangkan hal di atas, Anda bisa mengganti saja
[ -f ./file ] && source ./file
dengan Anda. ./file
. Jika file tidak ada yang terburuk yang akan terjadi adalah Anda akan mendapatkan pemberitahuan saat login - yang mungkin informasi yang ingin Anda miliki, saya pikir.Tentu saja jika Anda lebih suka mengikuti tes yang dapat Anda lakukan:
sumber
$_
, saya suka itu. :)test -f /.file && . $_
pendekatan yang ditunjukkan di sini$_
tidak distandarisasi oleh POSIX. The 8 parameter khusus yang$@
,$*
,$#
,$$
,$!
,$?
,$-
dan$0
.$_
adalah eksplisit dihilangkan . Komentar Anda yang salah memicu pertanyaan .Di
bash
,.
dansource
sinonim. Melihat kebash
kode sumber, filebuiltin/source.def
, Anda dapat melihat.
dansource
menggunakan fungsi internal yang samasource_builtin
:Tapi
source
tidak POSIX kompatibel, jadi jika naskah Anda disebut dengan POSIX/bin/sh
, Anda harus menggunakan.
bukansource
. Karena POSIX tidak membatasi shell, semua skrip Anda di atas akan berfungsi.Secara pribadi, saya selalu menggunakan
.
bukansource
. (Banyak skrip yang saya tulis dijalankan di bawahcron
).sumber
.
biasanya "lebih baik" daripada menggunakansource
, seperti kata @abonet,source
jauh lebih mudah untuk dicari. Karena tanda baca adalah tanda baca dalam banyak bahasa, mudah bagi mata untuk melewatinya. Itu sebabnya saya lebih suka menggunakansource
.