Я использую Ubuntu 12. Когда я набираю в свой терминал stat - , я получаю следующий вывод:

  File: ‘-’
  Size: 0           Blocks: 0          IO Block: 1024   character special file
Device: ch/12d  Inode: 3           Links: 1     Device type: 88,0
Access: (0620/crw--w----)  Uid: ( 1000/   anotherguy)   Gid: (    5/     tty)
Access: 2014-12-19 18:04:40.454800919 -0600
Modify: 2014-12-19 18:04:40.454800919 -0600
Change: 2014-12-19 16:55:48.454800919 -0600
 Birth: -

Я не вижу такого файла с помощью функции ls , и не важно, в каком каталоге я нахожусь, stat все еще видит этот "файл". Однако замена - на ./- дает "нет такого файла или каталога".

Это странное поведение похоже на использование в функции cd опции "-", по существу рассматривая эту опцию в качестве аргумента, делая ее предыдущим каталогом.

2 ответа2

2

- это не имя файла - разные программы будут обрабатывать его по-разному. Например, cd интерпретирует - для обозначения cd $ OLDPWD, в то время как многие другие программы трактуют - для обозначения /dev/stdout (чуть больше информации из выбранного ответа здесь).

Если вы попытаетесь использовать stat -f - , вы получите следующую ошибку:

stat: using ‘-’ to denote standard input does not work in file system mode

Итак, что это, stat -? Я протестировал его в нескольких дистрибутивах Linux, а также Mac OS X. stat - эквивалентен stat $(tty) и, по-видимому, является ссылкой на файл символьного устройства, связанный с сеансом терминала.

1

Хотя его нет на странице справочника, stat использует соглашение о том, что - в качестве имени файла обозначается стандартный ввод (или иногда стандартный вывод), поэтому вы обнаружите, что следующие две команды эквивалентны:

stat ExistingFile
stat - < ExistingFile

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .