Использование -
в качестве имени файла значения stdin / stdout - это соглашение, которое используют многие программы. Это не специальное свойство имени файла. Ядро не распознает -
как особые, поэтому любые системные вызовы со ссылкой на -
имя файла будут использовать -
буквально как имя файла.
С перенаправлением bash -
не распознается как специальное имя файла, поэтому bash будет использовать его как буквальное имя файла.
Когда cat
видит строку -
как имя файла, он воспринимает ее как синоним stdin. Чтобы обойти это, вам нужно изменить строку, которая cat
видит таким образом, что она по-прежнему ссылается на файл с именем -
. Обычный способ сделать это состоит в том, чтобы префикс имени файла с путем - ./-
, или /home/Tim/-
. Этот метод также используется для обхода подобных проблем, когда параметры командной строки конфликтуют с именами файлов, поэтому файл, на который ссылаются ./-e
, не отображается, например, как параметр -e
командной строки для программы.