Kabukta çağrı komutları nasıl çalışır
Hayır, bu bir komut değil. Kabukların çalışma şekli, bir metin satırı yazdığınızda, ilk sözcük komut olarak kabul edilir ve komut kabukta yerleşik olanlardan biri değilse, kabuk PATH
ortam değişkeninde listelenen tüm konumlara bakar .
Çalıştırmak istediğiniz komut şu anda bulunduğunuz dizinde bulunuyorsa, ancak bu dizin dizinler listesinde değilse ne olur PATH
? O zaman kullanmanız gerekir ./
. Yapmakla aynı şekilde /bin/bash
- kabuğa istediğiniz komutun bulunduğu yere, ona tam bir yol söylüyorsunuz. Ve ./ durumunda "bu dizine bak" komutunu vermeyi söylüyorsunuz. Bu nedenle önemli olan kısım, dosyanın bulunduğu dizinde bulunmanızdır.
Tabii ki, bir çalıştırılabilir dosyayı gerçekten çalıştırmak için çalıştırılabilir bit ayarına sahip olmalıdır, bu yüzden yapmanız gerekir chmod +x ./my_file
.
Yani önemli adımlar:
cd
dosyayı kaydettiğiniz yer ; eğer ~/Downloads
içerideysecd ~/Downloads
- Çalıştır
chmod +x ./truecrypt-7.2-setup-x86
, " bu dizindeki yürütülebilir dosyayı truecrypt-7.2-setup-x86 yap " diyor
- Ve şimdi yap
sudo ./truecrypt-7.2-setup-x86
Kullanımının ./
rastgele davranış olmadığını, aslında Taşınabilir İşletim Sistemi Arabirimi standardı (POSIX olarak da bilinir) tarafından belirtilen bir standart olduğunu unutmayın , özellikle "Komut Arama ve Yürütme" bölümüne bakın.
Hatayı yeniden oluşturma
$ # 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
NOT : tarafından verilen hata mesajı sudo
açıkça yanıltıcıdır, bu yüzden akılda tutulması gereken bir şeydir; ancak bunun OP'nin sorduğu sorunun özü olmadığını lütfen unutmayın .
Belgeler ve referanslar
Dan bash
4.3 kılavuzu, "KOMUTANLIĞI UYGULAMA" bölümünde:
Ad ne bir kabuk işlevi ne de yerleşiktir ve eğik çizgi içermiyorsa, bash, PATH'nin her öğesini bu ada göre yürütülebilir bir dosya içeren bir dizin arar.
Gönderen Betikte çalıştırmak için neden komut dosyası adından önce ./ (dot-slash) gereklidir? :
./ ile çalışır çünkü POSIX , / PAT içeren bir komut adının doğrudan dosya adı olarak kullanılacağını ve $ PATH içindeki bir aramayı bastıracağını belirtir . Aynı etki için tam yol kullanmış olabilirsiniz, ancak ./ daha kısa ve yazılması daha kolaydır.
./
Komutunun parçası "geçerli dizinde bak ve buradan komut 'truecrypt-7.2-kurulum-x86' yürütmek" söylüyor. Bu komutu dosyayı açtığınız dizinden çalıştırmanız gerekir.