Я мав цю дивну поведінку сьогодні вранці в терміналі "Баш":
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 та "]") та заміна його на пробіл змусили команду знову працювати.
Моє припущення було правильним: невідомий порожній символ проскочив до команди , але питання:
- Як я можу виявити ці символи в терміналі, щоб я міг налагоджувати команду? І ще важливіше:
- Як я можу запобігти цьому повторитись?
До речі, я використовую Ubuntu 18.04 / французькою мовою, сценарій, з якого я вставляю команду, знаходиться на USB-накопичувачі і, можливо, редагувався і в Windows.
Дякую за дуже гарні відповіді. Поганий символ - символ UTF-8, що не порушує пробіл c2 a0 . Питання про те, як видалити спеціальний символ 'M-BM-' за допомогою sed, має цікавий факт.
Дивна річ у тому, що сценарій не містить цього персонажа. Тож я не знаю, звідки це взялося.
history 2|xxd
(адже сама history
команда завжди остання в списку), або введіть history|grep "CommandWithProblem"|xxd
. Ви можете використовувати будь-яку іншу програму з шестигранним відображенням xxd
, але це за замовчуванням у форматі, який мені подобається.
set -x
. Це показало б вам команду та як вона розбита. Це не обов'язково буде говорити "поганий характер тут", але це показало б вам, що баш не розщеплюється на цього персонажа.