Что делает символы, отображенные ls-F средний?

Круглые скобки всегда запускают подоболочку. То, что происходит, - то, что удар обнаруживает это sleep 5 последняя команда, выполняемая той подоболочкой, таким образом, она звонит exec вместо fork+exec. sleep управляйте заменяет подоболочку в том же процессе.

Другими словами, основной случай:

  1. ( … ) создайте подоболочку. Исходные вызовы процесса fork и wait. В подпроцессе, который является подоболочкой:
    1. sleep внешняя команда, которая требует подпроцесса подпроцесса. Вызовы подоболочки fork и wait. В subsubprocess:
      1. subsubprocess выполняет внешнюю команду → exec.
      2. В конечном счете команда завершает → exit.
    2. wait завершается в подоболочке.
  2. wait завершается в исходном процессе.

Оптимизация:

  1. ( … ) создайте подоболочку. Исходные вызовы процесса fork и wait. В подпроцессе, который является подоболочкой, пока он не звонит exec:
    1. sleep внешняя команда, и это - последняя вещь, которую должен сделать этот процесс.
    2. Подпроцесс выполняет внешнюю команду → exec.
    3. В конечном счете команда завершает → exit.
  2. wait завершается в исходном процессе.

Когда Вы добавляете что-то еще после вызова sleep, подоболочка должна иметься в наличии, таким образом, этой оптимизации не может произойти.

Когда Вы добавляете что-то еще перед вызовом к sleep, оптимизация могла быть сделана (и ksh делает это), но удар не делает этого (это очень консервативно с этой оптимизацией).

65
09.07.2013, 20:39
2 ответа

ls -F добавляет символы к именам файлов. Эти символы показывают полезную информацию о файлах.

Если Вы хотите, чтобы это поведение было значением по умолчанию, добавьте это к своей конфигурации оболочки: alias ls='ls -F'.

73
27.01.2020, 19:32
  • 1
    не повторно искажает команды, он может повредить плохо записанные сценарии. Я исказил l иметь-F и цвет, и ll чтобы также иметь-l –  ctrl-alt-delor 30.06.2016, 14:03

Добавлю, как я нашел эту информацию. Как указано внизуman ls:

Full documentation at: https://www.gnu.org/software/coreutils/ls or available locally via: info '(coreutils) ls invocation'

После этого мы видим

‘-F’ ‘--classify’ ‘--indicator-style=classify’ Append a character to each file name indicating the file type. Also, for regular files that are executable, append ‘*’. The file type indicators are ‘/’ for directories, ‘@’ for symbolic links, ‘|’ for FIFOs, ‘=’ for sockets, ‘>’ for doors, and nothing for regular files. Do not follow symbolic links listed on the command line unless the --dereference-command-line (-H), --dereference (-L), or --dereference-command-line-symlink-to-dir options are specified.

наhttps://www.gnu.org/software/coreutils/manual/coreutils.html#General-output-formatting

4
27.01.2020, 19:32

Теги

Похожие вопросы