Я писал небольшой скрипт оболочки в bash для измерения скорости нескольких исполняемых файлов с помощью команды time
. Потому что я хотел время несколько различных программ, чтобы избежать повторения себя я спас команду времени и строка формата я хотел и пытался использовать расширение переменной (тестирование производительности ls
в качестве примера):Расширение переменной Bash нельзя комбинировать с командой времени
#!/usr/bin/env bash
timer="/usr/bin/time -f 'elapsed time: %E' --"
$timer ls 1>/dev/null
time
команда должна использовать --
, чтобы отделить ее параметры (в данном случае строку формата) от команды, которую она должна использовать во времени. Однако в этом сценарии time
настаивает на том, чтобы выполнить свою строку формата и не с
/usr/bin/time cannot run time:: No such file or directory
Command exited with non-zero status 127
'elapsed
Но если я положил всю команду на одной строке, без расширения переменной он корректно распознает формат строки и выполняет ls
:
#!/usr/bin/env bash
/usr/bin/time -f 'elapsed time: %E' -- ls 1>/dev/null
производит «истекшее время: 0: 00,00»
Я в конечном итоге просто печатала всю команду на каждой строке, чтобы заставить его работать, но мне было интересно, если кто-нибудь может объяснить, почему расширение переменной Безразлично Не работай здесь.