Sumber vs. mengapa perilaku berbeda?


17

Saya baru-baru belajar, itu

. ./.a.adan ./.a.asama.

Namun berusaha source source .a.amemberikan kesalahan. IMO, .menjadi Bash alias untuk sourcetidak boleh berperilaku berbeda, jadi apa yang saya lewatkan?

Bonus, mengapa tidak . .apa - apa sementara source sourcetidak?


8
Anda bisa memilih nama yang lebih jelas untuk contoh Anda :). Bagaimanapun, apa pun yang memberi Anda ide itu . scriptdan ./scriptmerupakan hal yang sama? Mereka tentu saja tidak . Juga, .bukan alias untuk source. Itu sebaliknya. .adalah standar dan sourcemerupakan alias ..
terdon

2
Setelah menghabiskan beberapa waktu melihat skrip shell, Anda terbiasa dengan .perintah itu, tapi maksud saya sourceadalah perintah yang lebih baik, ketika Anda melihat source somefiledalam skrip Anda langsung tahu apa pernyataan itu, tetapi . somefile tidak hanya tidak jelas apa fungsinya, Anda dapat dengan mudah kehilangan . karakter sama sekali
the_velour_fog

Bonus, mengapa. . OK sedangkan sumber tidak? - sejauh mana pesan kesalahan bash: .: .: is a directoryaktif . .ok perlu dijelaskan.
countermode

@terdon - benar sekali. Contoh aslinya adalah . ./.a.a .jujur. : -DA kuis macam, jika Anda mau. :-) Pertanyaan yang ditautkan luar biasa, terima kasih banyak. Apa yang memberi saya ide itu: fakta bahwa saya telah melihat tidak ada perbedaan dalam mengeksekusi file dengan cara ini dan fakta yang saya baca di suatu tempat .adalah alias untuk source. :-)
LAFK mengatakan Reinstate Monica

Jawaban:


27

Anda tidak bisa hanya mengganti .dengan di sourcemana - mana; jika

. ./.a.a

berfungsi, Anda dapat mengganti yang pertama .(setidaknya dalam Bash):

source ./.a.a

Yang kedua .mewakili direktori saat ini, Anda tidak dapat menggantinya dengan source(terutama tidak ./dengan sourceyang telah Anda lakukan).

source source

akan baik-baik saja jika Anda memiliki file yang dipanggil sourcedi direktori saat ini, berisi sesuatu yang bermakna untuk shell Anda saat ini. Saya tidak bisa melihat bagaimana . .akan baik-baik saja ...

Juga, . ./.a.adan ./.a.atidak sama, formulir kedua berjalan .a.adi shell yang terpisah. Lihat Apa perbedaan antara sumber ('.' Atau 'sumber') dan mengeksekusi file dalam bash? untuk detail.


9

sourceadalah kata kunci shell yang seharusnya digunakan seperti ini: di sourcefilemana fileberisi perintah shell yang valid. Perintah shell ini akan dieksekusi di shell saat ini seolah diketik dari baris perintah. Sekarang, .filelakukan persis sama.

Di luar itu .saja berarti "direktori kerja saat ini" seperti dalam ./xyz(" xyzdalam direktori ini") atau a/b/./c/./d(yang identik dengan a/b/c/d).

Di luar itu .dalam nama file hanya memiliki makna oleh konvensi seperti .foobaryang menunjukkan file "tersembunyi" (tidak benar-benar ...) atau seperti dalam foobar.pdf, yang menunjukkan format file dengan akhiran (di sini .pdf).

Makna yang berbeda ini tidak dapat dipertukarkan.


8
.sama sekali tidak ketinggalan jaman. Tidak seperti sourcecara portabel, POSIX yang didefinisikan untuk sumber file. The sourcealias shell-spesifik dan dapat berupa absen (misalnya dalam dash) atau berperilaku berbeda dari standar ..
terdon

Terima kasih @terdon, Wiki mengatakan bahwa sumber sebagai titik (.) Tidak dapat diterima di shell C, di mana perintah pertama kali muncul.
Noam Manos

1
@NoamManos mungkin, tetapi C-shell tidak POSIX, sehingga dapat (dan tidak) berperilaku sangat berbeda.
terdon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.