Bash розглядає вбудований модуль timeяк особливий випадок при аналізі командних рядків.
Як можна прочитати на сторінці bash, введений рядок спочатку розбивається на список:
pipeline ; pipeline
де трубопровід:
[time [-p]] [ ! ] command [ [|⎪|&] command2 ... ]
або в нашому випадку просто:
time command
тобто якщо час присутній, тоді також повинна бути присутня команда .
[Існує особливий випадок, який дозволяє timeслідувати новим рядком, але це не стосується тут]
Отже, у нашому випадку ми маємо:
time;date
розділяється на два трубопроводи:
1. time
2. date
і трубопровід 1 недостатньо сформований, оскільки ми маємо timeбез команди. Звідси помилка.
Зауважте, що і командний рядок timeтут не працює:
$ /usr/bin/time;date
Usage: /usr/bin/time [-apvV] [-f format] [-o file] [--append] [--verbose]
bash розбирає це, як очікувалося, на 2 трубопроводи:
1. /usr/bin/time
2. date
а /usr/bin/timeпотім відмовляється запускати без аргументів. Зауважте, що це помилка /usr/bin/timeне помилки від bash.
Причиною того, що функція зворотного галочки працює в тому, що зворотна галочка перестає timeінтерпретуватися як спеціальний елемент у трубопроводі.
тобто із зворотним галочкою:
`time`;date
вона розбита як два трубопроводи:
1. `time`
2. date
Пам'ятайте, що трубопровід, в нашому випадку, це:
[time] command
і проблема спочатку полягала в тому, що у нас не timeбуло команди, яка заборонена. Але тепер ми просто маємо команду:
`time`
без попереднього time, оскільки зворотні тики означають, що timeінтерпретується як команда, а не як попереднє слово.
Тож bash виконує вбудований timeбез аргументів, що прийнято. Він не дає результатів, і ми не бачимо помилок.
Зауважте, що:
`time`
фактично запускає результат з timeвбудованою, тобто він працює незалежно від timeвбудованого виробляє на стандартний висновок. Але оскільки timeсамостійно нічого не пише в stdout, схоже, це працює.
Нарешті, було помічено, що це працює:
time ; ; date
чого я не можу пояснити, на жаль :)
time;dateпротиdate;time. Це, мабуть, є проблемою з конвеєромbashі останнім символом, що генерується зtimeрезультатом. Тестовані результати в різних емуляторах терміналів: - [Bash] $ date; час # [OK] $ time; дата # [ NotOK ] bash: помилка синтаксису біля несподіваного маркера `date '$ time #, лише помилка не здається, що це результат будь-якої дати. - [Csh] $ date; час # [OK] $ time; дата # [OK] - [Tcsh] $ date; час # [OK] $ time; дата # [OK] - [Ksh] $ date; час # [ ОК] $ time; дата № [ОК]