Как записать в NULL-устройство/файл в Windows (10), чтобы я мог **не** читать то, что было написано?

В Windows есть концепция для нулевых устройств, как подробно описано здесь, здесь или здесь например. Все примеры, которые я могу найти, касаются перенаправления потоков.

При портировании скрипта из Linux в Windows я столкнулся с кое-чем странным: если nul открыть как файл, я пишу в него, закрываю, снова открываю и считываю данные обратно. Иногда. Проверяя рабочий каталог, я вижу, что файл с именем nul создается и растет по мере того, как я записываю в него данные. Как ни странно, я не могу удалить его из проводника, только из командной строки.

В настоящее время Windows 10 поставляется с собственной реализацией OpenSSH. Я хотел использовать старый трюк: когда он ищет файл known_hosts, я вместо этого хочу указать ему нулевое устройство. В Linux это выглядит так: ssh -o UserKnownHostsFile=/dev/null user@host. В Windows тестировал следующим образом: ssh -o UserKnownHostsFile=nul user@host. У меня есть файл с именем nul, содержащий hosts. Я также пробовал NUL, null и NULL с тем же результатом. Попытка указать на \Device\Null или /Device/Null приводит к тому, что ssh жалуется, что не может найти/открыть эти файлы.

Как правильно использовать и/или указать нулевое устройство в Windows (10)?


person s-m-e    schedule 03.05.2021    source источник
comment
вы используете powershell или cmd   -  person KetZoomer    schedule 03.05.2021
comment
Скрипты cmd и Python (с подпроцессами). Результат всегда один. Powershell не пробовал.   -  person s-m-e    schedule 03.05.2021
comment
stackoverflow.com/a/45391321/449722   -  person g01d    schedule 03.05.2021
comment
попробуй пауэршелл, ssh -o UserKnownHostsFile=$null user@host   -  person KetZoomer    schedule 03.05.2021
comment
@ g01d NUL, за которым следует двоеточие (NUL:), не работает: я получаю файл с некоторым символом Юникода вместо двоеточия. Это странно.   -  person s-m-e    schedule 03.05.2021
comment
@KetZoomer Хотя я использую cmd для тестирования, для производства я запускаю свои процессы независимо от какой-либо оболочки, т.е. subprocess.Popen с помощью shell = False.   -  person s-m-e    schedule 03.05.2021


Ответы (1)


У толпы JS есть решение: мне нужно указать на \\.\NUL. По-видимому, это фактическое имя или путь к нулевому устройству.

person s-m-e    schedule 03.05.2021
comment
Это действительно имеет смысл, поскольку это полный путь UNC. Хорошая находка. pcmag.com/encyclopedia/term/unc - person g01d; 03.05.2021