Показ дописів із міткою unix. Показати всі дописи
Показ дописів із міткою unix. Показати всі дописи

четвер, 24 грудня 2009 р.

Стягування файлів через telnet

Пригадався епізод із університетських часів. Дуже хотілося знайти собі якісь хороші п’єски для гітари (MIDI), а доступ з мережі університету був обмежений навчальними сайтами. Крім того, коли я був на молодших курсах, до інтернету була підключена тільки станція HP, на яку можна було зайти через текстовий термінал. Ото справжня Unix!

Так, знайомий ще зі школи старшокурсник підказав дуже цікавий спосіб. Треба було зайти на яку-небудь більш відкриту систему по telnet, знайти й стягнути потрібний файл у ній, закодувати його у ASCII інструментом uuencode і роздрукувати його у термінал командою cat. Таким чином, якщо записати сеанс у якийсь файл, то вже локально можна розкодувати файл інструментом uudecode.

Сеанс мав приблизно такий вигляд:

[~]$ telnet grex.org | tee grex.log
[grex.org:~]$ wget http://cool.site/file.mid
[grex.org:~]$ uuencode file.mid file.mid.uue
begin xxx file.mid.uue
...
end
[grex.org:~]$ logout
[~]$ uudecode grex.log -o file.mid

Процес повільний, клопіткий, але дуже цікавий. “Голь на выдумки хитра”!

понеділок, 14 грудня 2009 р.

Помилка і tee в конвеєрі

Чергове “прозріння” граблями в лоб не забарилося. Ситуація, як у M$ Windows: на екрані повідомлення про успішне завершення, а насправді жодних зрушень. Як виявилося, причиною стали наступні рядки у скрипті:

long_operation 2>&1 | tee /var/log/long_operation.log
[[ $? -eq 0 ]] && echo "Succeeded"

Якщо виконання “довгої операції” закінчується невдало, то tee сумлінно приховає цей факт, і в будь-якому випадку з’явиться повідомлення про успіх. Отже, таке шоу краще влаштовувати по-іншому:

long_operation >(tee /var/log/long_operation.log) 2>&1
[[ $? -eq 0 ]] && echo "Succeeded"

UPD

Несподівано ікнулося, що це працює не завжди. Тепер використовуємо ${PIPESTATUS[0]}.