오늘 아침 bash 터미널 에서이 이상한 행동을했습니다.
user@home:/home/user$ [ -f /etc/openvpn/client.conf ] && echo true
bash: [: missing «]»
user@home:/home/user$ [ -f /etc/openvpn/client.conf ] && echo true
true
- 첫 번째 명령은 gedit로 편집 한 스크립트에서 붙여 넣었습니다 .
- 두 번째는 터미널에 직접 입력 되었습니다.
약간의 파기 후에 30 번째 문자 (client.conf와 "]"사이의 공백) 를 제거하고 공백으로 바꾸면 명령이 다시 작동 한다는 것을 알았 습니다.
내 가정은 옳았다 : 알 수없는 빈 문자가 명령에 빠져 들었지만 질문은 다음과 같습니다.
- 터미널에서 해당 문자를 표시하여 명령을 디버깅 할 수 있습니까? 그리고 더 중요한 :
- 이 문제가 다시 발생하지 않도록하려면 어떻게해야합니까?
BTW, Ubuntu 18.04 / 프랑스어를 실행 중입니다. 명령을 붙여 넣은 스크립트는 USB 드라이브에 있으며 Windows에서도 편집되었을 수 있습니다.
좋은 답변 감사합니다. 잘못된 문자는 c2 a0 비 공백 공간 UTF-8 문자입니다. 질문 나오지도 함께 특별한 'M-BM-'문자를 제거하는 방법은 그 문자에 대한 흥미로운 사실이있다.
이상한 점은 스크립트에이 문자가 없다는 것입니다. 그래서 나는 그것이 어디에서 왔는지 모른다.
history 2|xxd
( history
명령 자체가 항상 목록의 마지막 이므로 ) history|grep "CommandWithProblem"|xxd
. 대신 다른 16 진수 디스플레이 프로그램을 사용할 수 xxd
있지만 기본값은 내가 좋아하는 형식입니다.
set -x
합니다. 명령과 분할 방법이 표시됩니다. 반드시 "나쁜 캐릭터는 여기에"라고 말할 필요는 없지만 배쉬가 해당 캐릭터에 분할되지 않았 음을 보여줍니다.