Apa artinya `. / path / command` do? (Spasi setelah titik, jalur absolut)

7

Dari panduan ini hingga penyelesaian Bash kita belajar bahwa agar Bash dapat melakukan pelengkapan otomatis, seseorang harus melakukan . /etc/etc/bash_completion.d/foobar( perhatikan spasi setelahnya. ) agar penyelesaian Bash dapat berfungsi.

$ /etc/bash_completion.d/ssh
bash: /etc/bash_completion.d/ssh: Permission denied
$ . /etc/bash_completion.d/ssh
$ ls -l /etc/bash_completion.d | grep ssh
-rw-r--r-- 1 root root   297 Jan 28 18:04 ssh

Apakah .pintasan untuk sourceperintah? Jika tidak, lalu apa itu? Google tidak mungkin untuk, man sourcetidak menghasilkan apa-apa, dan apropos sourcedan info sourcememberikan begitu banyak informasi yang tidak relevan sehingga saya tidak tahu apakah yang saya cari ada di sana. Bagaimana saya bisa mulai RTFM untuk menemukan sendiri jawaban dari pertanyaan ini?

dotancohen
sumber
Baca bashhalaman manual karena ini adalah perintah bawaan, cari penjelasan untuk sumber, sulit untuk dilewatkan.
Anthon
3
"Apakah .pintasan untuk perintah sumber?" - itu benar-benar sebaliknya: .adalah perintah, dan sourcealias kompatibilitas (untuk kompatibilitas dengan csh). Perhatikan bahwa sourcetidak ada dalam shell bourne POSIX standar, hanya ..
Celada
Seringkali ketika itu sederhana itu tetap tersembunyi ... Ini bisa sesederhana seperti menulis " bantuan ": lihat di bawah ;)
Hastur

Jawaban:

14

Ya .identik dengan sourcefungsi.

Seperti biasa, referensi pertama adalah man bashhalaman manual tempat Anda dapat mengkonfirmasi dugaan awal Anda dengan mencari/ source

... fungsi shell atau skrip yang dijalankan dengan .atau sumber ...

adalah referensi pertama, tetapi sedikit lebih jauh Anda menemukan bagian Perintah Shell Builtin

. filename [arguments]
source filename [arguments]
Baca dan jalankan perintah dari nama file di lingkungan shell saat ini dan kembalikan status keluar dari perintah terakhir yang dieksekusi dari nama file. Jika nama file tidak mengandung garis miring, nama file di PATH digunakan untuk menemukan direktori yang berisi nama file. File yang dicari di PATH tidak perlu dapat dieksekusi. Ketika bash tidak dalam mode posix, direktori saat ini dicari jika tidak ada file yang ditemukan di PATH. Jika opsi sourcepath ke perintah shopt builtin dimatikan, PATH tidak dicari. Jika ada argumen yang diberikan, mereka menjadi parameter posisi ketika nama file dieksekusi. Jika tidak, parameter posisi tidak akan berubah. Status kembali adalah status dari perintah terakhir yang keluar dalam skrip (0 jika tidak ada perintah yang dijalankan), dan salah jika nama file tidak ditemukan atau tidak dapat dibaca.

Fakta bahwa itu adalah fungsi bash builtin adalah alasan sumber tidak datang dengan halaman manualnya sendiri, itulah sebabnya mengapa gagal.

HBruijn
sumber
Terima kasih, saya tidak akan pernah berpikir untuk melakukan man bash, tetapi saya akan menambahkan itu ke teknik "coba sebelum posting" saya. Halaman itu sepertinya akan memakan waktu berbulan-bulan untuk saya tinjau dan pahami sepenuhnya, saya senang!
dotancohen
Seperti biasa referensi pertama adalah man bash? Saya yakin jika saya memiliki masalah dengan sshperintah yang tidak akan banyak membantu saya. Ini lebih merupakan referensi dari upaya terakhir.
Anthon
Jika Anda menulis skrip bash dan menyelidiki penyelesaian otomatis, ya itu pasti. Tapi itu mungkin suara pengalaman.
HBruijn
Perintah dot ada di shell Bourne, dan standar di shell POSIX. Perintah source adalah analog dalam shell C, dan ditambahkan ke Bash (dan tidak distandarisasi oleh POSIX).
Jonathan Leffler
untuk bash bawaan Anda dapat menggunakan help, seperti di help sourceatauhelp .
Carlos Campderró
4

Jawaban Anda secara singkat:

  1. . absolute_path/mycommand sumber file skrip mycommandyang ada di direktori absolute_path/. Untuk referensi lebih lanjut baca di sini
  2. Ya . dan sourcesetara.
  3. Saat dibutuhkan, tanyakan helppada bash shelldirinya sendiri. Anda akan memiliki jawaban untuk perintah bawaan.

Beberapa kata lebih
sering. Cara yang paling sederhana adalah yang paling sulit dipahami: kami tidak berpikir kami bisa meminta helpke shell itu sendiri, ketika perintah didefinisikan secara internal.
Dengan type .dan type sourcekita dapat melihat bahwa orang-orang yang built-in perintah.

Hastur@Cthulhu:~> type . source  
. is a shell builtin  
source is a shell builtin

Setelah kita mengetahuinya, helpkita dapat memiliki informasi cepat tentang mereka.
Perintah helptanpa parameter dari prompt memberi kita:

GNU bash, versi 4.1.2 (1) ...
Perintah shell ini didefinisikan secara internal .
Ketik helpuntuk melihat daftar ini. Ketik help nameuntuk mencari tahu lebih lanjut tentang nama fungsi .
Gunakan info bashuntuk mencari tahu lebih lanjut tentang shell secara umum.
Gunakan man -k' orinfo 'untuk mengetahui lebih lanjut tentang perintah yang tidak ada dalam daftar ini.

Sementara itu dengan help .serta help sourceAnda mendapatkan yang sama identik bantuan:

source: source 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.

"Yang jelas adalah apa yang tidak pernah terlihat sampai seseorang mengekspresikannya secara sederhana." K. Gibran

Cepat
sumber
1

Titik ini "." berarti membaca dan menjalankan perintah dari argumen nama file dalam konteks shell saat ini. Ini setara dengan sumber. Gaya ini dari Bourne shell, dan silakan merujuk ke http://ss64.com/bash/source.html

pengguna94000
sumber