При первом проходе через цикл 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].
Храните вывод smartctl
в переменной и используйте его столько раз, сколько захотите.
smartctl_output=$(smartctl -a /dev/sda)
serial_number=$(printf %s "$smartctl_output" | awk 'sub(/^Serial Number: */,"")')
printf %s "$smartctl_output" >"$serial_number.txt"
Вы могли просто сохранить вывод smartctl-a
во временном файле и затем сделать двойной синтаксический анализ на этом. Это делает тестирование вашего сценария быстро (генерируйте временный файл однажды, прокомментируйте вызов к smartctl
, скорректируйте свой синтаксический анализатор, пока они не являются удовлетворительными, затем не комментируют строка smartctl
.
, Кроме того, можно использовать моча
для передачи по каналу вывода smartctl-a
в две программы, но вам все еще был бы нужен временный файл от одного процесса, который может быть переименован с порядковым номером, как найдено другим.