dash` `` `bash on on 'komutunun bulunamaması' hatası ne anlama geliyor?


28

Bir bash komut isteminde geçersiz bir komut girdiğinizde mesajı alırsınız

-bash: {command}: command not found

En -başında ne anlama geliyor ?


Komutu tam olarak nasıl çalıştırıyorsunuz? Ben çoğaltmak için çalıştım, ama aynı sonuçları alamıyorum - örneğin> jhgjbjbkjln: command not found- hayır -bash: orada. Kullandığınız bashUnix, Linux, OSX içinde ...? Soruyorum çünkü belki de bu, varsayılan olarak hata mesajından önce belirli bir uygulama koymaktır ve bir anlamı yoktur ... belki.
jimm-cl

@jim ssh computernameÇoğaltmak için sayma komutunuzu deneyin .
Bernhard

Yanıtlar:


27

Bu bir giriş kabuğu olduğu anlamına gelir.

Kimden man bash:

Bir oturum açma kabuğu, ilk argüman sıfırı bir - olan veya bir --login seçeneğiyle başlayan bir kabuktur.

( bashTerminolojide "sıfırıncı" argümanı, sizin durumunuzda olan komut adıdır bash.) bashBunu yürütme .bash_profilevb. Gibi oturum açma etkinliklerini yapmak için bir sinyal olarak kullanır .

Çizginin otomatik olarak eklenebilmesinin bir yolu, kabuğun başlatılmasıdır exec. Gönderen Bash kılavuzda :

exec [-cl] [-a name] [command [arguments]]

[...] -lSeçenek verilirse, kabuk komuta iletilen sıfır argümanının başına bir çizgi koyar .

Örnek

Komutu çalıştırmak için bu iki girişimi karşılaştırın nonexistent. İlk olmadan -l:

$ exec bash
$ nonexistent
bash: nonexistent: command not found

Ve ikinci olarak:

$ exec -l bash
$ nonexistent
-bash: nonexistent: command not found

3
Alıntı yaptığınız belgelerin bir kısmının açıklamanızla uyuşmadığını düşünüyorum. exec -lBir çizgi hazırlayan gerçeği, bash'ın çalışmasına neden olabilecek olası bir yoldur -bash, ancak kendi başına bunun bir giriş kabuğu olduğunu söylemez ve OP'nin hiç kullanmadığı exec -liçin çok iyi bir şans vardır. . Belgelerin -bashbir giriş kabuğu yaptığını söyleyen kısım "INVOCATION Bir giriş kabuğu, ilk argüman sıfırı sıfır olan bir karakterdir, ya da bir tanesi --login seçeneğiyle başlar."
salı

@hvd, kabul etti. Doğru olmasına rağmen, bu cevap noktayı özlüyor.
Stéphane Chazelas,

1
"Sıfırıncı argüman" bashterminoloji değil , Unix kurallar + C indeksleme: Her program ilk girişi program adı olan bir parametre listesi ve ardından argümanlar tarafından iletilir. C dizileri sıfırdan başlayarak dizine alındığından, sıfır argümanı (yani, sıfır argümanı) program adıdır ve asıl argümanlar dizin 1 ile başlar.
celtschk

15

Diğer cevap, mümkün olduğu kadar iyidir, ancak özelliğin bashtan daha genel olduğunu söylemeye değer.

Eski zamanlardan beri, loginprogram argv[0]kullanıcının kabuğunu çalıştırdığında bir gösterge hazırlamış ve kabuk bunu "giriş kabuğu" olarak davranması gerektiğinin bir işareti olarak kabul etmiştir. Buradaki V7 kılavuz sayfalarında belgelenmiştir: giriş (1) , sh (1) .

Oturum açma benzeri bir hizmet sağlayan tüm programlar (bir kullanıcının kimliğini doğrula ve bir kabuk çalıştır) "hazırlama satırı" kuralına uymalıdır. Örneğin, sshd, bu yorum altında ssh / session.c dosyasında gördüğünüzü yapar :

/*
 * If we have no command, execute the shell.  In this case, the shell
 * name to be passed in argv[0] is preceded by '-' to indicate that
 * this is a login shell.
 */

Tüm mermiler öndeki çizgiyi tanır. Eşdeğer -lseçenek klasik Bourne kabuğunda veya orijinal csh'de mevcut değil, ancak daha yeni mermilerde (bash, dash, ksh, yash, tcsh, zsh, rc, es, balık ve csh'nin herhangi bir yarı-sürümü) var.


2
Artık çoğu mermi -lseçeneği olsa da , loginhala kullanmıyor. Tüm mermilerin ön eki argv[0]"resmi" bir mekanizma olarak kabul etmesi bekleniyor .
Barmar
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.