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

쉘에서 수행되는 작업을 이라고 합니다.분사(자세한 내용을 읽을 수 있습니다). 대부분의 경우(및 귀하의 경우) 이는 명령줄에서 작은 특수 문자 집합을 프로그램에 전달하려면 해당 문자를 보호해야 함을 의미합니다. 이를 보호하려면 백슬래시( \)를 앞에 두거나 관련 텍스트를 따옴표로 묶어야 합니다.

참고 사항: 작은따옴표는 내부에 특별한 의미를 갖는 문자가 없다는 점에서 "더 강력"합니다. 큰따옴표를 사용하면 특정 문자가 내부의 특별한 의미를 유지할 수 있습니다.

"단어 분할"이라는 이름에서 짐작할 수 있듯이 공백은 프로그램에 전달하려고 할 때 보호해야 하는 것 중 하나입니다. 그러나 위의 인용 규칙을 보면 따옴표와 백슬래시도 보호해야 한다는 것이 분명해졌습니다.

문제는 wpa_cli가 SSID 주위에 따옴표(이중?)를 기대하지만 SSID가 보호되지 않기 때문에 셸에 의해 "먹힌다"는 것입니다. 이제 wpa_cli set_network 0 ssid '"my ssid"'큰따옴표를 작은따옴표로 묶으면 wpa_cli 명령이 "my ssid"이를 네 번째 매개변수로 처리합니다.

관련 정보