「コマンドが見つかりません」エラーの「bash」の前のダッシュ「-」はどういう意味ですか?


28

bashプロンプトで無効なコマンドを入力すると、メッセージが表示されます

-bash: {command}: command not found

-最初に何が意味しますか?


コマンドをどのくらい正確に実行していますか?私は複製しようとしましたが、同じ結果が得られません-例jhgjbjbkjln: command not found-いいえ-bash: 。あなたが使用しているbashのUnixやLinux、OSXで、...?たぶん、これは特定の実装がデフォルトでエラーメッセージの前に置くものであり、それは何も意味しないかもしれないので...私は尋ねます。
jimm-cl 14

@jim Try ssh computernameして、複製するcountコマンドではありません。
ベルンハルト14

回答:


27

ログインシェルであることを意味します。

からman bash

ログインシェルは、引数ゼロの最初の文字が-であるシェル、または--loginオプションで開始されたシェルです。

bash用語では、「ゼロ番目」の引数はコマンド名であり、これはあなたの場合はbash。でした。) bash実行などのログインアクティビティを行うためのシグナルとしてこれを使用します.bash_profile

ダッシュが自動的に追加される1つの方法は、シェルがで開始されている場合execです。Bashマニュアルから:

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

[...] -lオプションが指定されている場合、シェルはcommandに渡されるゼロ番目の引数の先頭にダッシュを置きます。

コマンドを実行するこれら2つの試行を比較しますnonexistent。まずなし-l

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

そして、第二に、

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

3
引用しているドキュメントの一部が説明と一致していないと思います。exec -lダッシュを付加するという事実は、bashをとして実行させる可能性のある方法ですが-bash、それ自体ではログインシェルであるとは言っておらず、OPがまったく使用さexec -lれていない可能性が非常に高いです。ドキュメントの中で-bashログインシェルにする部分は、「INVOCATIONログインシェルは、引数ゼロの最初の文字が-であるシェル、または--loginオプションで開始されるシェルです」です。
hvd 14

@hvd、同意しました。正しいとはいえ、この答えはポイントを逃しています。
ステファンシャゼル14

1
「0番目の引数」はbash用語ではなく、Unixの慣習+ Cのインデックス付け:各プログラムにはパラメータリストが渡されます。最初のエントリはプログラム名で、その後に引数が続きます。Cアレイはゼロから始まるインデックス付けされているので、引数ゼロ(すなわち、ゼロ番目の引数である)プログラム名、実際の引数はインデックス1で始まる
celtschk

15

他の答えは、それだけでは十分ですが、この機能はbashよりも一般的であることに言及する価値があります。

古くから、loginプログラムはargv[0]ユーザーのシェルを実行するときにダッシュを付加しており、シェルはこれを「ログインシェル」として動作する必要があることを示す記号として認識しています。これは、V7のmanページ(login(1)sh(1))に記載されています。

ログインのようなサービスを提供する(ユーザーを認証し、シェルを実行する)プログラムはすべて、「ダッシュを追加」ルールに従う必要があります。たとえば、sshdは、次のコメントの下のssh / session.cで見ることができます。

/*
 * 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.
 */

すべてのシェルは先頭のダッシュを認識します。同等の-lオプションは、従来のBourneシェルまたは元のcshには存在しませんが、ほとんどの新しいシェル(bash、dash、ksh、yash、tcsh、zsh、rc、es、fish、およびcshの半最新バージョン)にはあります。


2
現在、ほとんどのシェルには-lオプションがありますが、loginまだ使用していません。すべてのシェルは、プレフィックスをargv[0]「公式」メカニズムとして認識することが期待されています。
バーマー14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.