Saya memiliki perilaku aneh pagi ini di terminal 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
- Perintah pertama disisipkan dari skrip yang diedit dengan gedit.
- Yang kedua diketik langsung di terminal.
Setelah beberapa penggalian, saya menemukan bahwa menghapus karakter ke-30 (ruang antara client.conf dan "]") dan menggantinya dengan spasi membuat perintah berfungsi lagi.
Asumsi saya benar: karakter kosong yang tidak dikenal telah menyelinap ke dalam perintah , tetapi pertanyaannya adalah:
- Bagaimana saya bisa mengungkapkan karakter-karakter itu di terminal sehingga saya bisa men-debug perintah? Dan yang lebih penting:
- Bagaimana saya bisa mencegah hal ini terjadi lagi?
BTW, saya menjalankan Ubuntu 18.04 / Bahasa Perancis, skrip yang saya tempelkan perintah dari dalam drive USB dan mungkin telah diedit pada Windows juga.
Terima kasih atas jawaban Anda yang sangat bagus. Karakter buruknya adalah karakter UTF-8 ruang bebas c2 a0 . Pertanyaan Bagaimana menghapus karakter 'M-BM-' khusus dengan sed memiliki fakta menarik tentang karakter itu.
Yang aneh adalah naskahnya bebas dari karakter ini. Jadi saya tidak tahu dari mana asalnya.
history 2|xxd
(karena history
perintah itu sendiri selalu yang terakhir dalam daftar), atau ketik history|grep "CommandWithProblem"|xxd
. Anda dapat menggunakan program tampilan hex lain, bukan xxd
, tetapi ini default ke format yang saya suka.
set -x
. Ini akan menunjukkan kepada Anda perintah & bagaimana itu dibagi. Itu tidak selalu mengatakan "karakter buruk di sini", tetapi itu akan menunjukkan kepada Anda bahwa bash tidak terpecah pada karakter itu.