Используя вывод команды для определения названия файла для перенаправления вывода к

[1120907]Глядя на исходный код mv, [1121315]http://www.opensource.apple.com/source/file_cmds/file_cmds-220.7/mv/mv.c[1121316] :


При первом проходе через цикл while, [1121317]open(to, O_CREAT | O_EXCL | O_TRUNC | O_WRONLY, 0)[1121318] с EEXIST произойдет сбой. Затем [1121319]/dev/null[1121320] будет разблокирован, и цикл повторится. Но, как вы указали в своём комментарии, обычные файлы невозможно создать в [1121321]/dev[1121322], поэтому при следующем проходе по циклу [1121323] open(to, O_CREAT | O_EXCL | O_TRUNC | O_WRONLY, 0)[1121324] всё равно произойдёт сбой.

Я бы отправил отчёт об ошибке в Apple. Исходный код [1121325]mv[1121326] в основном не изменился по сравнению с версией FreeBSD, но так как у devfs OSX есть такое не-POSIX поведение с обычными файлами, Apple должна исправить их [1121327]mv[1121328].[1120912].

2
23.11.2014, 01:39
2 ответа

Храните вывод smartctl в переменной и используйте его столько раз, сколько захотите.

smartctl_output=$(smartctl -a /dev/sda)
serial_number=$(printf %s "$smartctl_output" | awk 'sub(/^Serial Number: */,"")')
printf %s "$smartctl_output" >"$serial_number.txt"
2
27.01.2020, 22:13

Вы могли просто сохранить вывод smartctl-a во временном файле и затем сделать двойной синтаксический анализ на этом. Это делает тестирование вашего сценария быстро (генерируйте временный файл однажды, прокомментируйте вызов к smartctl, скорректируйте свой синтаксический анализатор, пока они не являются удовлетворительными, затем не комментируют строка smartctl .

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

0
27.01.2020, 22:13

Теги

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