ฉันมีพฤติกรรมที่แปลกประหลาดนี้เมื่อเช้านี้ในสถานีทุบตี:
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 และ "]") และแทนที่ด้วยช่องว่างทำให้คำสั่งทำงานอีกครั้ง
สมมติฐานของฉันถูกต้อง: อักขระว่างที่ไม่รู้จักเลื่อนลงในคำสั่ง แต่คำถามคือ:
- ฉันจะเปิดเผยตัวละครเหล่านั้นใน terminal ได้อย่างไร และที่สำคัญกว่า:
- ฉันจะป้องกันไม่ให้สิ่งนี้เกิดขึ้นอีกได้อย่างไร
BTW ฉันใช้ Ubuntu 18.04 / ภาษาฝรั่งเศสสคริปต์ที่ฉันวางคำสั่งนั้นอยู่ในไดรฟ์ USB และอาจถูกแก้ไขบน Windows ด้วย
ขอบคุณสำหรับคำตอบที่ดี ตัวละครที่ไม่ดีคือ c2 a0 อักขระ UTF-8 แบบไม่ทำลาย คำถาม วิธีการลบตัวอักษร 'M-BM-' แบบพิเศษด้วย sed มีข้อเท็จจริงที่น่าสนใจเกี่ยวกับตัวละครนั้น
สิ่งที่แปลกคือสคริปต์นี้ปราศจากตัวละคร ดังนั้นฉันไม่รู้ว่ามันมาจากไหน
history 2|xxd
(เพราะว่า history
คำสั่งตัวเองมักจะเป็นคนสุดท้ายในรายการ) หรือพิมพ์ history|grep "CommandWithProblem"|xxd
. คุณสามารถใช้โปรแกรมแสดงผล hex อื่น ๆ แทน xxd
แต่ค่าเริ่มต้นนี้เป็นรูปแบบที่ฉันชอบ
set -x
. นี่จะแสดงคำสั่ง & amp; มันเป็นอย่างไร มันไม่จำเป็นต้องพูดว่า "ตัวละครที่ไม่ดีที่นี่" แต่มันจะแสดงให้คุณเห็นว่าการทุบตีไม่ได้แยกตัวละครนั้น