Ваша система rename
выглядит как вариант util -linux 1 -, и в этом случае вы можете просто запустить ту же команду во второй раз, чтобы удалить вторую новую строку, например.:
$ ls -Q
"\nfile name\n"
$ rename.ul $'\n' '' *
$ ls -Q
"file name\n"
$ rename.ul $'\n' '' *
$ ls -Q
"file name"
1 см. Что со всеми переименованиями :предименовать, переименовать, файл -переименовать?
Дело в том, что стандартные потоки предполагаются доступными при запуске процесса, а это означает, что файловые дескрипторы для них передаются каждой программе.(Системе даже разрешено открывать некоторый неуказанный файл в этих файловых дескрипторах, если в противном случае они оставались бы закрытыми после execve()
. )Другая вещь, которая делает эти потоки стандартными, заключается в том, что библиотека времени выполнения C создает объекты FILE
, соответствующие стандартному вводу, выводу и ошибкам, поэтому пользовательская программа может использовать, например. fprintf()
и другие stdio.h
функции на них сразу.
«Устройства» /dev/stdin
и т. д. не связаны с этим, но являются специфическими для системы -способами доступа к этим файловым дескрипторам (или базовым файлам )через имена . Если вы посмотрите, например. /dev/stdin
в Linux это символическая ссылка, указывающая на /proc/self/fd/0
, который сам по себе является волшебным интерфейсом ядра для файлового дескриптора 0 текущего процесса. Без этого сам fd open /dev/stdin
ничего не делает.
Таким образом, чтобы добавить новый «стандартный поток», вам потребуется изменить библиотеку C и, возможно, ряд программ, которые специально обрабатывают fds 0, 1 и 2 при запуске программ.
Но если вы говорите о процессах, открывающих файл по мере необходимости, это звучит немного иначе, чем стандартные потоки. Конечно, вы можете создать именованный файл где-нибудь, что ваши программы могут предполагать наличие. Но что будет делать этот файл, и будет ли он обычным файлом, каналом или сокетом, зависит от того, что вы на самом деле пытаетесь сделать. Кроме того, если он относится к какой-либо программе или набору программ, его лучше поместить в что-то вроде /var/lib/mytool
, а не в /dev/
.