Shell betiği cd komutunu çalıştırmaz


15

Ben yerine terminali ve yazmaya açılması bir kabuk komut dosyası ile başlatmak istiyorum, metin tabanlı oyun, Colossal Cave Adventure var cd ~/Desktop/CCAve ./Adventure. Kullanmaya çalıştığım kod şudur:

#! /bin/bash
gnome-terminal -e 'cd ~/Desktop/CCA/; ./Adventure'

ve aldığım mesaj şudur:

There was an error creating the child process for this terminal
Failed to execute child process `cd` (No such file or directory)

profil tercihlerini değiştirme veya işlemi yeniden başlatma seçenekleriyle. Ayrıca yerine mutlak yolu kullanarak denedim ~/ve tüm dosya adları doğru yazıldığından ve doğru yere işaret. Yanlış olan ne?

Yanıtlar:


16

cd bir kabuk yerleşiktir. Bunu kullanmalısın:

#! /bin/bash
gnome-terminal --working-directory=/home/username/Desktop/CCA/ -e './Adventure'

Teşekkürler cd, bunun bir emir olmadığının farkında değildim.
Giaphage47

1
cdKesinlikle olan bir komut! Hastur'un cevabı doğru bir şekilde ifade edildiği gibi, kabuk yerleşik komutu olarak bilinir . Kabuk yerleşik komutlarına kısaca "kabuk yerleşik" veya "yerleşik" denir, ancak kesinlikle komuttur. Olmayan bir dış komuttur . Ubuntu'nun hiçbir programı yoktur (ve eğer öyleyse, çalıştırmanın yine de çalıştırdığınız kabuktaki dizini değiştirme etkisi olmaz ). @ Giaphage47cdcd
Eliah Kagan

11

Hata

Failed to execute child process "cd" (No such file or directory)

Çünkü doğar cdbiridir SHELL BUILTIN COMMANDSve fiziksel olarak sabit disk üzerinde bulmak bir yürütülebilir.

built-inKomut dosyasında veya komutlarındaki diğer komutları çalıştırmak için tüm satırı bir bashçağrıya geçirmeniz gerekir

 gnome-terminal -e '/bin/bash -c "cd ~/Desktop/CCA/; ./Adventure" '   

Yürütmeniz gereken başka bir iç komut yoksa, buradagnome terminal yanıtlandığı gibi, için çalışma dizinini ayarlayabilirsiniz :

gnome-terminal --working-directory=/home/username/Desktop/CCA/ -e './Adventure'

Reklam nauseam : bazı alternatifler var:

Eğer sadece bir terminaldeyseniz,

  • bir aliasbeğenme yapın
    alias Star_My_Game="cd ~/Desktop/CCA; ./Adventure "
    ve içine .bashrcveya içine koyun , ~/.bash_aliasesböylece Start_My_Gameher kabukta tek komutla çalıştırabilirsiniz (Start_My_Game'den daha basit / kısa bir ad seçmek daha rahat ...)

  • veya yürütülebilir ( chmod u+x MYscript) yapabileceğiniz ve içine yerleştirebileceğiniz bir komut dosyası path(tipik ~/binolarak iyi bir adaydır).

Sanırım masaüstünüzde terminali çalıştıran ve başlangıç ​​davranışını değiştiren bir bağlantı koyabilirsiniz. GNOME yardımından

  1. Düzenle ▸ Profil Tercihleri ​​▸ Başlık ve Komut'u seçin.

  2. Kabuğum yerine özel bir komut çalıştır'ı işaretleyin.

  3. Metin kutusuna komutu veya istediğiniz kabuğu yazın.

  4. Komut, belirttiğiniz argümanlar da dahil olmak üzere tam olarak yazdığınız gibi terminale aktarılır. Ortam değişkenleri terminalin alt süreci olduğu için terminalden devralınır.

    Özel kabuğun veya komutun nasıl çalıştığını görmek için yeni bir Terminal sekmesi veya penceresi açın


Ama asıl mesele bir kabuk komut dosyasından başlamak ve bir terminal penceresi açmak zorunda değildi.
Giaphage47

Bir komut dosyasından başlatmak istiyorsanız alias, yeni bir terminal başlatmadan ~ / bin dizininizde bir (daha rahat) veya komut dosyası yeterlidir
Hastur

Tekrar ihtiyacınız olması durumunda cevap güncellendi: geçmek mümkün, cdancak geçmeniz gerekiyor bash. Bir onay verin :) -
Hastur
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.