Adakah yang bisa menjelaskan kepada saya apa yang dilakukan shell pada dua contoh A) dan B) di bawah ini? Ini jelas berperilaku berbeda, tetapi saya tidak bisa mencari tahu mengapa outputnya berbeda.
Contoh:
Mari kita memiliki skrip di direktori kami saat ini bernama bla.sh
dengan hanya satu perintah:
echo ${0##/*} hello
A)
Dimulai sebagai: ./bla.sh
memberi:./bla.sh hello
B)
Dimulai sebagai: . bla.sh
memberi:-bash hello
Karena saya menggunakan ini dalam skrip, output kedua (karena "-" di depan-bash) membunuh perintah. Tentu saja, yang sederhana --
sebelum ${...}
membantu, tetapi saya ingin memahami apa yang menyebabkan output di tempat pertama.
Saya suka bash. Dan vi [m]. Tapi saya ngelantur ...
source
ini adalah alias bash untuk.
, bukan sebaliknya dansource
tidak akan berfungsi di shell lain../<cmd>
akan menjalankan<cmd>
program yang berada di direktori saat ini dalam proses baru (bercabang). Itu harus dapat dieksekusi. Dan juga dapat dibaca itu dimulai dengan#!
.. <cmd>
akan membuat shell Anda saat ini menjalankan skrip shell<cmd>
yang berada di$PATH
direktori Anda atau saat ini dalam proses shell saat ini . Itu harus dibaca. Ini adalah alias untuk perintah shellsource
.sumber
. <cmd>
akan mencari program di$PATH
dan jika tidak ditemukan maka akan melihat di direktori saat ini.. ./cmd
./cmd
menggunakan jalur eksplisit (./
- dir saat ini) ke executable. Dan itu tidak perlu dimulai#!
.. cmd
- (aliassource
) - perintah bash builtin. Satu perbedaan yang terlihat dari mengeksekusi melaluisource
itu dapat mengatur / memodifikasi variabel lingkungan shell saat ini.sumber
source
adalah bash-only alias to.
(yang standar)