если вы запускаете официальный образ докера ubuntu
docker run -it ubuntu bash -i
запустите эту команду grep -v -e '^ #' -e '^$' /etc/apt/sources.list , чтобы показать, что у вас есть в ваш файл /etc/apt/sources.list .
см. man of grep(https://linux.die.net/man/1/grep)
вы должны увидеть эти строки:
deb http://archive.ubuntu.com/ubuntu/ bionic main restricted
deb http://archive.ubuntu.com/ubuntu/ bionic-updates main restricted
deb http://archive.ubuntu.com/ubuntu/ bionic universe
deb http://archive.ubuntu.com/ubuntu/ bionic-updates universe
deb http://archive.ubuntu.com/ubuntu/ bionic multiverse
deb http://archive.ubuntu.com/ubuntu/ bionic-updates multiverse
deb http://archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ bionic-security main restricted
deb http://security.ubuntu.com/ubuntu/ bionic-security universe
deb http://security.ubuntu.com/ubuntu/ bionic-security multiverse
поэтому после запуска apt -получите обновление и после того, как вы можете запустить apt -получить установку emacs -nox vim nano
time
не синхронизирует команды. Из обоснования Единой спецификации Unix :
The term utility is used, rather than command, to highlight the fact that shell compound commands, pipelines, special built-ins, and so on, cannot be used directly.
В SUS также указано, что результат time
для специальных , встроенных -в команды, не определен, и его результаты при использовании на чем-либо другом, кроме простая команда(т.е.на конвейерах или группах команд )не указаны.
Это связано с тем, что time
является , а не обязательным для специального синтаксиса оболочки или встроенной -командой. И варьировалось ли оно достаточно значительно во время первой стандартизации, и существенно ли различается сейчас.
time
не является ни зарезервированным словом, ни построенным -в команде. Это внешняя команда, поэтому ее нельзя применить ни к чему, кроме простой команды . Внешняя команда time
на BSD использует информацию об использовании процесса, возвращенную из ядра библиотечной функцией wait4()
, и требует, чтобы синхронизируемая программа была оболочкой, если вы хотите синхронизировать построенную -оболочку в командах и конвейерах.. Таким образом, такие вещи, как time bindkey
, не находят утилиты для выполнения, а такие вещи, как time echo
, измеряют время работы внешнейecho
команды, а не оболочки, встроенной -в одну. time
является встроенной -командой и не может применяться ни к чему, кроме простой команды . time
работает, просматривая результаты библиотечной функции wait4()
, которая требует ожидания дочернего процесса. Таким образом, оболочка Ctime
всегда разветвляет дочерний процесс , даже для других встроенных -команд. Вы обнаружите, что такие вещи, как time bindkey -v
, ничего не дают, потому что они выполняются в дочернем процессе как следствие time
. time
является зарезервированным словом в синтаксисе оболочки и может применяться к конвейерам. Эти оболочки не используют информацию об использовании дочерних процессов, возвращаемую библиотечной функцией wait4()
, а вычисляют время, заключая в скобки вызовы команд с вызовами getrusage()
и выполняя вычитания. time
является зарезервированным словом в синтаксисе оболочки и может применяться к конвейерам.Оболочка Z использует информацию об использовании процесса, возвращенную из ядра библиотечной функцией wait4()
, но не вызывает разветвления для встроенных -команд. Таким образом, он ничего не сообщает , если ни один дочерний процесс не был разветвлен (, как в случае встроенного -в таких командах, какtrue
); но, наоборот, такие, как time set -o vi
, действительно чего-то достигают. Как указано в ее обосновании, Единая спецификация Unix сформулирована свободно, чтобы разрешить все различные варианты поведения. И это указывает на то, что временная оболочка, встроенная -в команды, является проблемой.
В то время как большинство оболочек поддерживают синхронизацию внешних и встроенных команд, zsh не поддерживает синхронизацию для встроенных команд.
Если вам нужно получить результат времени, вы можете позвонить
time /bin/true
или отправьте отчет об ошибке людям из zsh.
С новой информацией все выглядит иначе.
Сложные команды синхронизации работают только в том случае, если time
является зарезервированным словом в оболочке.
Таким образом, у вас есть два ограничивающих фактора
оболочка должна иметь возможность синхронизировать встроенные команды
оболочка должна реализовать time
как зарезервированное слово, улучшающее синтаксис оболочки
Это сокращает список потенциальных оболочек до:
bosh bash mksh ksh
Для встроенных команд оболочка должна знать, как измерять собственное время.
Для сложных команд оболочка должна реализовать time
внутри интерпретатора.