Почему команда «время» не работает с какой-либо опцией?

50

Я попытался использовать команду time с опцией -f для форматирования вывода времени, но я получаю следующую ошибку:

-f: command not found

Затем я попытался использовать другие опции -a , -o и т. д., и я получаю ту же ошибку. Даже time --version не работает ( --version: command not found ).

Не говори мне, чтобы я читал этого человека, потому что я уже делаю это много раз ... Все эти параметры указаны там. Итак, где может быть проблема?

    
задан user258266 14.03.2014 в 18:50
источник

3 ответа

73

Хорошо, даже если вам это не понравится, я попрошу вас прочитать снова с большим вниманием man time . В конце раздела EXAMPLES вы найдете:

  Users of the bash shell need to use an explicit path in order to run
  the external time command and not the shell builtin variant.  On system
  where time is installed in /usr/bin, the first example would become
       /usr/bin/time wc /etc/hosts

Итак, я предполагаю, что вы используете оболочку bash, которая использует встроенную оболочку, версию time . Вы можете проверить это, используя следующую команду:

type time

, и выход будет, вероятно, следующим:

time is a shell keyword

Если это так, то ясно, что для использования реальной time команды вы должны использовать свой явный путь: /usr/bin/time .

Кроме того, если вы больше не хотите использовать оболочку, встроенную в time , вы можете создать постоянный псевдоним следующим образом:

alias time='/usr/bin/time'

Это перезапишет встроенную оболочку time , потому что команда:

type time

теперь выдаст следующий результат:

time is aliased to '/usr/bin/time'
    
ответ дан Radu Rădeanu 14.03.2014 в 18:56
источник
19

Так как, как объясняют другие ответы, time - это ключевое слово оболочки, единственным доступным вам вариантом является -p :

[email protected] ~ $ help time
time: time [-p] pipeline
    Report time consumed by pipeline's execution.

Execute PIPELINE and print a summary of the real time, user CPU time,
and system CPU time spent executing PIPELINE when it terminates.

Options:
  -p    print the timing summary in the portable Posix format

Итак, вам нужно запустить time , находящуюся в /usr/bin . Вот несколько способов сделать это:

  • Вместо этого используйте исполняемый файл time :

    /usr/bin/time -f %Uuser ls >/dev/null
    
  • Используйте \ , из-за чего ваша оболочка игнорирует псевдонимы, встроенные функции и ключевые слова и вместо этого ищет ваш $PATH для соответствующего исполняемого файла:

    \time -f %Uuser ls >/dev/null 
    
  • Используйте встроенный command , который выполняет те же действия, что и выше

    command time -f %Uuser ls >/dev/null
    
  • Используйте другую оболочку, которая не имеет такого ключевого слова. Например, sh (на самом деле dash на Ubuntu

    sh -c "time -f %Uuser ls >/dev/null"
    
  • Используйте which , который будет искать ваш $PATH (ОК, это глупо)

    $(which time) -f %Uuser ls >/dev/null
    
ответ дан terdon 14.03.2014 в 19:10
15

У оболочек bash и zsh есть внутренняя команда time . Вы должны использовать

/usr/bin/time -f ...

Кстати, я обнаружил, что используя (из zsh ):

~% which  time
time: shell reserved word
    
ответ дан Rmano 14.03.2014 в 18:54