2010-10-17 21 views
7

Bir programı betik yoluyla çalıştırmak istiyorum. normalde kabukta ./program yazıp program başlar.Linux: Bir betikte bir ikili çalıştır

benim script şöyle:

başarısız
#!/bin/sh 
cd /home/user/path_to_the_program/ 
sh program 

, ben geçen hat ters gitti düşünüyorum ...

ben bu çocukça bir soru ama thx zor olduğunu biliyorum!

+0

, #!/Bin/sh olmamalıdır? – Protostome

cevap

0

Burada "sh" a ihtiyacınız yok. Sadece son programa "program" yaz.

+0

bana: "program: bulunamadı" –

+0

Ah, program $ PATH içinde değil. ./program çalışacaktır. – Toucan

+0

Tamam, PATH'a koymadan komut dosyası aracılığıyla çalıştırmanın bir yolu var mı? –

11

./program kabukta çalışıyorsa, neden betiğinizde kullanılmıyor?

#!/bin/sh 
cd /home/user/path_to_the_program/ 
./program 

sh program denemek ve bir kabuk komut dosyası olarak program yorumlamak sh başlattı. Büyük olasılıkla bir betik değil, başka bir yürütülebilir dosya, bu yüzden başarısız oluyor.

2

sh'a ihtiyacınız yoktur ve $PATH'unuzdaki programın yoluna sahip olmadığınız anlaşılıyor.

bu deneyin:

#!/bin/sh 
cd /home/user/path_to_the_program/ 
./program 
+0

'sh' kullanımı açıklandıysa daha iyi olurdu. Neden 'sh' ile çalışmıyor? – Arafangion

1

Bu yeterli olmalı: ait

  • yürütülebilir biraz
  • shebang hattını:

    /home/user/path_to_the_program/program 
    

    Bu işe yaramazsa, aşağıdakileri kontrol Program (eğer bir betikse)

  • Eğer

    ./program 
    

    yazdığınızda

+0

Program, geçerli dizinden göreceli yollara bağlıysa, yolun verilmesi işe yaramayabilir. Örneğin, program, programla aynı dizinde bulunan giriş dosyalarına bağlı olabilir. –

+0

Bu durumda haklısınız. –

+0

Bunun nasıl yapıldığına bakılmaksızın, tam yolun/bir yerden/yoldan gelmesi gerekir - eğer yolda değilse o zaman, eğer orada değilse, o zaman açık bir şekilde bazı araçlarla ayarlanmalıdır. – Arafangion

3

kabuk dosya ihtiyacı yürütülecek nasıl belirlediği göre programı çalıştırmak çalışır. Bir ikili ise, giriş alt yordamını yürütmeye çalışır. Kabuk tespit ederse kabuk dosyası geçecek

#!/bin/sh 

veya

#!/bin/awk 

veya daha genel olarak

#!/path/to/interpreter 

kullanımı ile, örneğin, bir komut, (ve herhangi bir verilen argümanlar Sağlanan tercümanın argümanları olarak betiği çalıştıracaktır. Yolda verilen yorumlayıcı mevcut değilse, kabuk hata verecektir ve herhangi bir yorumlayıcı hattı bulunmazsa, kabuk sağlanan komut dosyasının kendi başına yürütüleceğini kabul edecektir.

programın ilk satırı bin/sh yolunda sh (olduğunu/varsayarak

#!/bin/sh 

içerdiğinde

sh program 

./program 

eşdeğerdir bir komut örneğin/sistem/bin/sh olabilir). Bir ikili'yi sh'ye geçirmek, sh'in bir kabuk betiği olarak davranmasına neden olur ve bu ikili, yorumlanamaz bir kabuk (düz metin) değildir. Bu bağlamda

sh program 

kullanamazsınız nedeni budur. Ayrıca programın yakut, awk, sed veya kabuk betiği olmayan başka bir şey olması nedeniyle başarısız olur.

İlgili konular