Это некрасиво, но должно работать:
ssh user@host bash < <(sed 's/\. util\.sh/ {r util.sh; d}' main.sh)
Это встроит содержимое сценария util в основной сценарий, а затем направит сценарий в процесс bash, работающий на удаленном хосте. Обратите внимание, что я удалил двойные кавычки :, так как замена процесса должна выполняться на вашем локальном компьютере, где находятся оба файла.
But I can't figure out exactly what the command is intended to accomplish
Заменяет нулевые байты на 071 (0x39 57 00111001 )байт. Без понятия, как это может быть полезно.
Обычно, если вы хотите проверить работоспособность диска, вы используете другие шаблоны, например.
00000000 0000 0x0
11111111 0377 0xFF
01010101 0125 0x55
10101010 0252 0xAA
Все эти значения используются, например,.badblocks
Давайте разделим это:
tr '\0' '\071' < /dev/zero
считывает из /dev/zero
, что дает нулевые байты, и заменяет все нулевые байты('\0'
)байтами, содержащими 71 в восьмеричном ('\071'
), т.е. цифра 9 в ASCII или 0x39 в шестнадцатеричном (, что и показывает hexdump
). В результате получается никогда не заканчивающийся -поток размером 0x39 байт.
dd of=/dev/sda bs=1M conv=fsync 2>/dev/null
берет на этом входе (все девятки )и записывает их в /dev/sda
по 1 мегабайту за раз, гарантируя, что данные будут записаны до завершения.
dd
останавливается, когда достигает конца /dev/sda
; это приводит к тому, что tr
также останавливается (, он больше не может записывать в канал и останавливается ).
Предположительно, цель состоит в том, чтобы скрыть любые данные, ранее находившиеся на диске; действительно ли это полезно — другой вопрос.