Вы хотите, чтобы первые две строки соответствовали либо product:
, либо serial:
. Если это так, вы можете попробовать:
$ sudo lshw | grep -Em2 'serial:|product:'
product: 20FWCTO1WW (LENOVO_MT_20FW_BU_Think_FM_ThinkPad T460p)
serial: PF0P1EUH
В качестве альтернативы, grep
все строки, которые соответствуют любой из целевых строк, а затем использовать head
для печати только первых двух:
$ sudo lshw | grep -E 'serial:|product:' | head -n2
product: 20FWCTO1WW (LENOVO_MT_20FW_BU_Think_FM_ThinkPad T460p)
serial: PF0P1EUH
Конечно , оба эти подхода предполагают, что у вас никогда не будет второго product:
перед первым serial:
и наоборот.
Вероятно, у вас уже есть сообщения об ошибках, которых вы просто не видите при запуске этого сценария.
Захватить весь вывод в журнал, выполнив его с помощью
script.sh> log.txt 2> & 1
Последняя часть перенаправляет stderr на stdout, в данном случае log.txt
Вероятно, вы обнаружите, что у вас истекло время ожидания (сколько файлов вы отправляете, насколько стабильно ваше соединение), или, может быть, команда, которая, по вашему мнению, ожидает следующей команды, на самом деле не ждет в сценарии.
Ваш сценарий должен установить двоичный файл
(после команд quote
). В противном случае для этого скрипта будет использоваться текстовый режим.
Если бы он был интерактивным, ftp-клиент, который я только что тестировал, перейдет в бинарный режим. Но не тогда, когда он не интерактивен.
Вот что я проверил / и исправил:
#!/bin/sh
ftp -in invisible-island.net <<EOF
quote USER anonymous
quote PASS anonymous
binary
cd cproto
get cproto.tar.gz
bye
EOF