Ketika Anda memasukkan perintah yang tidak valid pada prompt bash Anda mendapatkan pesan
-bash: {command}: command not found
Apa yang -
ditandakan oleh awal?
ssh computername
dan tidak menghitung perintah Anda untuk mereplikasi.
Ketika Anda memasukkan perintah yang tidak valid pada prompt bash Anda mendapatkan pesan
-bash: {command}: command not found
Apa yang -
ditandakan oleh awal?
ssh computername
dan tidak menghitung perintah Anda untuk mereplikasi.
Jawaban:
Ini berarti bahwa itu adalah shell login.
Dari man bash
:
Shell login adalah karakter yang argumen pertama nol adalah a -, atau yang dimulai dengan opsi --login.
(Dalam bash
terminologi, argumen "nol" adalah nama perintah yang, dalam kasus Anda, adalah bash
.) bash
Menggunakan ini sebagai sinyal untuk melakukan aktivitas masuk seperti mengeksekusi .bash_profile
, dll.
Salah satu cara agar tanda hubung dapat ditambahkan secara otomatis adalah jika shell dimulai dengan exec
. Dari manual Bash :
exec [-cl] [-a name] [command [arguments]]
[...] Jika
-l
opsi ini disediakan, shell menempatkan tanda hubung di awal argumen nol yang diteruskan ke perintah .
Bandingkan kedua upaya ini untuk menjalankan perintah nonexistent
. Pertama tanpa -l
:
$ exec bash
$ nonexistent
bash: nonexistent: command not found
Dan kedua, dengan:
$ exec -l bash
$ nonexistent
-bash: nonexistent: command not found
exec -l
menambahkan tanda hubung adalah cara yang memungkinkan yang dapat menyebabkan bash dijalankan -bash
, tetapi dengan sendirinya tidak mengatakan bahwa itu adalah shell login, dan ada peluang yang sangat baik bahwa OP belum menggunakan exec -l
sama sekali . Bagian dari dokumentasi yang mengatakan -bash
membuatnya sebagai shell login adalah "INVOKASI Shell login adalah karakter yang argumen pertama nol adalah a -, atau yang dimulai dengan opsi --login."
bash
terminologi, tetapi konvensi Unix + pengindeksan C: Setiap program akan melewati daftar parameter, yang entri awalnya adalah nama program, diikuti oleh argumen. Karena array C diindeks mulai dengan nol, argumen nol (yaitu, argumen nol) adalah nama program, dan argumen aktual dimulai dengan indeks 1.
Jawaban lain baik-baik saja sejauh ini, tetapi perlu disebutkan bahwa fitur ini lebih umum daripada bash.
Sejak zaman kuno, login
program telah menambahkan tanda hubung pada argv[0]
saat menjalankan shell pengguna, dan shell telah mengenali ini sebagai tanda bahwa ia harus berperilaku sebagai "shell login". Itu didokumentasikan dalam halaman manual V7 di sini: login (1) , sh (1) .
Semua program yang menyediakan layanan seperti login (otentikasi pengguna dan menjalankan shell) harus mengikuti aturan "dash sebelumnya". Sebagai contoh, sshd melakukan seperti yang Anda lihat di ssh / session.c di bawah komentar ini:
/*
* 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.
*/
Semua kerang mengenali dasbor utama. -l
Opsi yang setara tidak ada di shell Bourne klasik atau csh asli, tetapi sebagian besar shell yang lebih baru (bash, dash, ksh, yash, tcsh, zsh, rc, es, fish dan semua versi semi-baru-baru dari csh) memilikinya.
-l
opsi, login
masih tidak menggunakannya. Semua shell diharapkan mengenali awalan argv[0]
sebagai mekanisme "resmi".
jhgjbjbkjln: command not found
- tidak ada-bash:
di sana. Apakah Anda menggunakanbash
di Unix, Linux, OSX, ...? Saya bertanya karena mungkin ini adalah sesuatu yang diterapkan secara spesifik sebelum pesan kesalahan secara default, dan itu tidak berarti apa-apa ... mungkin.