Komut dosyası farklı bir dizinde nasıl yürütülür?


51

Bunu denedim

./home/user/scripts/someScript

ama çalışmıyor

Böyle bir dosya ya da dizin yok

herhangi bir fikir?


2
Açıkçası böyle bir dosya veya dizin yok. Yani yanlış yol veriyorsun. Oradaki nokta "çalıştır" demek değildir. Bu sadece yolun bir parçası. Kabukta normal olarak ya yürütülecek dosyaları ya da komutları (gerçekte dosya olanları da
yazabilirsiniz

o başlangıç ​​döneminden kurtulun ve tekrar deneyin. Alternatif olarak, ~ / script / someScript de çalışacaktır. Ayrıca `` qoutes 'un aklındakileri saklayın ve exec programları ($ man exec)
j0h

Yanıtlar:


61

Komutunuzdaki ana nokta "geçerli dizine göre" anlamına gelir. Kaldır ve " someScriptdizindeki dosyaya başvurur /home/user/scripts:

/home/user/scripts/someScript

"İzin reddedildi" alırsanız, bunun nedeni, diğer kullanıcıların dizinindeki dosyaya erişmek için yeterli izne sahip olmadığınız veya dosyanın çalıştırılamadığıdır. Çalıştırılabilir yapmak için aşağıdakileri çalıştırın:

chmod +x /home/user/scripts/someScript

35

Komut dosyanızın çalıştırıldığı aynı klasördeki kaynaklara erişmesi gerekiyorsa ve onu göreli yollar olarak belirttiyseniz, komut dosyanız bozulur.

Her zaman betiğimin cd $(dirname $0)başına eklerim , böylece betiği içeren klasör kök klasör olur.


6

Kaldır .

Birlikte isim listesi çalıştırılabilir yaparsanız chmod 755 <nameofscript>çalıştırmak için sadece komut yolunu yazmanız gerekir.

Kullanıldığını gördüğünüzde ./script, kodun çalıştırdığınız aynı dizinde bulunduğunu kabuğa söyler. Tam yolu kullanmak için yazın sh /home/user/scripts/someScript.


sh /path/to/filefarklıdır /path/to/file. birbirine bağlanan shkoşuları . /bin/sh/bin/dash
Lekensteyn

Sadece internette gördüğünüz örnekler üzerinde net bir şeyler yapmak, normalde sh ./somescripthangisinin “sh / path / to / script / scriptitself” olarak yazılabileceğini görürsünüz.
Bruno Pereira
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.