wpa_cli:対話型シェルは機能しますが、単一のコマンドは失敗しますか?

wpa_cli:対話型シェルは機能しますが、単一のコマンドは失敗しますか?

wpa_cliを使ってWi-Fiに接続しようとしています。私は走った$ wpa_cli add_network、戻った0、逃げた$ wpa_cli set_network 0 ssid "my ssid"。しかし、これは失敗しました。その後、インタラクティブシェルを試して実行しましたが、set_network 0 ssid "my ssid"大丈夫ですか?どちらも失敗したり完璧に動作したりしないのですか?なぜ1つだけ失敗するのですか?

ベストアンサー1

シェルで実行される操作はと呼ばれます。噴射(詳細を読むことができます)。ほとんどの場合(およびあなたの場合)、これはコマンドラインから小さな特殊文字セットをプログラムに渡すためにその文字を保護する必要があることを意味します。これを保護するには、バックスラッシュ(\)を前に置くか、関連テキストを引用符で囲む必要があります。

注:一重引用符は、内部に特別な意味を持つ文字がないという点で「より強力」です。二重引用符を使用すると、特定の文字が内部の特別な意味を維持することができます。

「単語分割」という名前から推測できるように、スペースはプログラムに渡そうとするときに保護する必要があるものの1つです。しかし、上記の引用規則を見ると、引用符とバックスラッシュも保護する必要があることが明らかになりました。

問題は、wpa_cliがSSIDの周りの引用符(二重?)を期待していますが、SSIDが保護されていないため、シェルによって「食べられる」ことです。二重引用符を一重引用符で囲むと、wpa_cli set_network 0 ssid '"my ssid"'wpa_cliコマンドは"my ssid"それを4番目のパラメータとして扱います。

おすすめ記事