Bagaimana cara memanggil perintah di shell bekerja
Tidak, ini bukan perintah. Cara kerja shell adalah ketika Anda mengetikkan satu baris teks, kata pertama akan diperlakukan sebagai perintah, dan jika perintah tersebut bukan salah satu dari shell yang ada di dalam maka shell akan melihat semua lokasi yang terdaftar dalam PATH
variabel lingkungan .
Apa yang terjadi jika ketika perintah yang ingin Anda jalankan berada di direktori yang sama dengan Anda saat ini tetapi direktori itu tidak ada dalam daftar PATH
direktori? Saat itulah Anda perlu menggunakan ./
. Ini dengan cara yang persis sama dengan melakukan /bin/bash
- Anda memberi tahu shell di mana perintah yang Anda inginkan berada, jalur penuh untuk itu. Dan dalam kasus ./ Anda mengatakan untuk shell "lihat di direktori ini". Jadi bagian yang penting adalah Anda harus berada di direktori yang sama di mana file tersebut berada.
Tentu saja, untuk benar-benar menjalankan executable, ia harus memiliki bit set yang dapat dieksekusi, jadi Anda harus melakukannya chmod +x ./my_file
.
Jadi langkah-langkah penting:
cd
tempat Anda menyimpan file; jika ada di ~/Downloads
, makacd ~/Downloads
- Jalankan
chmod +x ./truecrypt-7.2-setup-x86
, ini mengatakan "buat file truecrypt-7.2-setup-x86 yang ada di direktori ini dapat dieksekusi"
- Dan sekarang lakukan
sudo ./truecrypt-7.2-setup-x86
Perhatikan bahwa penggunaan ./
bukan perilaku acak, tetapi sebenarnya merupakan standar, yang ditentukan oleh standar Antarmuka Sistem Pengoperasian Portabel (alias POSIX) , secara khusus lihat bagian "Perintah Pencarian dan Eksekusi".
Mereproduksi kesalahan
$ # my script is in ~/Downloads folder
$ stat -c "%n" /home/xieerqi/Downloads/my_script.sh
/home/xieerqi/Downloads/my_script.sh
$ # if I run sudo ./my_script.sh, we get an error
$ sudo ./my_script.sh
[sudo] password for xieerqi:
sudo: ./my_script.sh: command not found
$ # of course the command not found because file is not in ./, not in this dir
$ # this is not sudo's problem
$ # but sudo does indeed show the same error even if you're in same directory
$ cd ./Downloads/
$ sudo ./my_script.sh
[sudo] password for xieerqi:
sudo: ./my_script.sh: command not found
CATATAN : pesan kesalahan yang diberikan sudo
jelas menyesatkan sehingga ini adalah sesuatu yang harus diingat; namun harap dicatat bahwa ini bukan inti dari pertanyaan yang diajukan OP.
Dokumentasi dan referensi
Dari bash
4.3 manual, bagian "COMMAND EXECUTION":
Jika namanya bukan fungsi shell atau builtin, dan tidak mengandung garis miring, bash mencari setiap elemen PATH untuk direktori yang berisi file yang dapat dieksekusi dengan nama itu.
Dari Mengapa Anda perlu ./ (dot-slash) sebelum nama skrip untuk menjalankannya di bash? :
Ini berfungsi dengan ./ karena POSIX menentukan bahwa nama perintah yang mengandung / akan digunakan sebagai nama file secara langsung, menekan pencarian di $ PATH. Anda bisa menggunakan path lengkap untuk efek yang sama persis, tetapi ./ lebih pendek dan lebih mudah untuk ditulis.
./
dari perintah mengatakan "Lihat di direktori saat ini, dan jalankan perintah 'truecrypt-7.2-setup-x86' dari sini". Anda perlu menjalankan perintah ini dari direktori tempat Anda membuka file.