Bu sabah bir bash terminalinde bu garip davranışı yaşadım:
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
- İlk komut gedit ile düzenlenen bir komut dosyasından yapıştırıldı .
- İkincisi doğrudan terminale yazılmıştır .
Biraz kazmadan sonra , 30. karakteri (client.conf ve "]" arasındaki boşluk) kaldırmanın ve bir boşlukla değiştirmenin komutun tekrar çalışmasını sağladığını öğrendim.
Benim varsayım haklıydı: bilinmeyen bir boş karakter komuta girdi , ancak soru şu:
- Komutta hata ayıklamak için terminaldeki bu karakterleri nasıl gösterebilirim? Ve daha da önemlisi:
- Bunun tekrar olmasını nasıl önleyebilirim?
BTW, Ubuntu 18.04 / Fransızca dilini çalıştırıyorum, komutu yapıştırdığım komut dosyası bir USB sürücüsünde ve Windows'ta da düzenlenmiş olabilir.
Çok iyi cevaplarınız için teşekkür ederim. Kötü karakter bir c2 a0 kırılmaz boşluk UTF-8 karakteridir. Sed ile özel 'M-BM-' karakterini kaldırma sorusu bu karakter hakkında ilginç bir gerçeğe sahiptir.
Garip olan şey, betiğin bu karakterden arınmış olmasıdır. Bu yüzden nereden geldiğini bilmiyorum.
history 2|xxd
(çünkü history
komutun kendisi her zaman listede sonuncudur) veya yazın history|grep "CommandWithProblem"|xxd
. Bunun yerine başka bir hex görüntüleme programı kullanabilirsiniz xxd
, ancak bu varsayılan olarak sevdiğim bir biçimdir.
set -x
. Bu size komutu ve nasıl bölündüğünü gösterir. Mutlaka "burada kötü karakter" demek değildir, ama size bash'ın bu karakter üzerinde bölünmediğini gösterir.