Відмінності echo у bash та dash

Сьогодні вкотре наштовхнувся на одну з дрібних і неочевидних речей, які треба «просто знати».

Отже, лінуксовий CGI-sh-скрипт на апачі, точніше, одна з його частин. Шукає назву сканера і пише у файл.
OP={scanimage -f "Device=%d"}
echo "$OP" > z.out

Проблема в тому, що у назві пристрою є два слеші підряд. Так показує scanimage, і саму таку назву він хоче бачити, коли його викликають з іменем пристрою у якості параметра. У вихідний файл вперто пишеться один слеш замість двох. Задній розум відчуває, що десь тут воно бачить спецсимвол, але як його змусити писати те, що треба? man echo вказує на чарівну опцію -Е, яка змушує не інтерпретувати слеші як маркери спецсимволів, але собака зарита не тут — ця опція дефолтна, і навіть явне її вказання ситуацію не розрулює.

Запускаємо scanimage в консолі. Два слеша. Перенаправляємо вивід у файл — два слеша. Пишемо ще один скрипт, точніше, копіюємо вищевказану частину великого скрипта у окремий файл, запускаємо. Два слеша. Але оригінльний скрипт дає один. Перебираємо всі види лапок — один слеш.

Виявляється. Собака була зарита не у наведеному коді, а у заголовку. Великий файл мав
#!/bin/sh
а в малий, тестовий, на автоматі ввели
#!/bin/bash
І що вийшло? sh «з'їв» подвоєний слеш, а bash залишив усе як було. Подальше розслідування показало, що в системі sh посилається на dash, і що справа не у записі в файл, а у виводі echo, чи, ймовірніше, у інтерпритації цього виводу оболонкою. Такі справи.

Яка ж мораль цієї байки? Баги часто сидять не там, де ми їх шукаємо, а у тих місцях, про які забуваємо. (В компанії ключів, гаманців і мобілок, ага!). І навіть така типова штука, як вказаний у першому рядку скрипта інтерпритатор, може у реальному житті виявитися не зовсім типовою.

Linux Scan Server Повідомлення-посилання

Сьогодні нарешті знайшов спосіб сканувати документи через браузер. Навіщо? Щоб не використовувати платні бібліотеки JSane i JTwain (і не писати для них GUI на Java). Сканер підключається до сервера з Лінуксом, що надає веб-інтерфейс до сканування. Відскановані файли іменуються автоматично і зберігаються на сервері. Наразі остання стабільна версія цього софта - 1.1.9, датована 2008 роком, 1.2 - бета у розробці. Але все OpenSource - копирсайтесь на здоров'я!

Callerid(num) у CDR для Asterisk 1.8

У Asterisk є функція для ідентифікації абонента, що телефонує — CALLERID(). Аж до версії 1.6.2 номер можна було встановити за її допомогою ось таким простим чином:
Set(CALLERID(num)=123456)

Втім, у версії 1.8 тут виявився підводний камінь: хоча встановлений номер відображався на телофоні абонента, але у Call Detail Record (CDR) записувався не цей номер, а прописаний у конфігурації того, хто дзвонить. З цього приводу на баг-трекері Астеріска з'явилась ішка про некоректний запис CDR, яка провисіла у відкритому стані понад півроку. І ось, сьогодні випадково натрапив на допис, з якого випливає, що це, як то кажуть, «не баг, а фіча». Оиригінал тут.

Отже, суть в тому, що у CDR пишеться CALLERID(ANI-num) а не CALLERID(num). Тобто, потрібно писати так:
Set(CALLERID(ANI-num)=123456)

Не Дивно, що у вбудованій довідці Астеріска по згаданій функції про такий ось фінт вухами скромно промовчали, а й на баг-трекері виставили статус «Acknowledged» і поклали в довгий ящик, замість пояснити, що так воно і має бути.

Вийшла Bada 2.0 Повідомлення-посилання

Samsung розродився черговою версією власної мобільної платформи. З нових фіч заявлено багатозадачність, покращена підтримка Flash, HTML5, обмін даними між програмами, Speech-to-Text, Text-to-Speech, Near Field Communication (NFC) та інши прибамбаси. PS Хто ще не в курсі - зараз відбувається конкурс українських програм на Бада. Деталі на http://developer.bada.com/challenge/UKR2011

80 / 20 та оцінка часу

Загальновідоме правило 80/20: 80% функціональності пишеться за 20% часу, решта 20% — за 80% часу.

Оце нещодавно трапилась ситуація, коли написав, на око, 80% деякого функціоналу, і по тому вирішив занести його у баг-трекер. А коли виставляв оцінку по часу, згадав про це правило. Якось, ніби, дивно, коли зробив майже всю задачу за півдня, а щоб доробити до кінця, пишеш в запас ще два дні, а не пару годин. Мені, в таких випадках, якось звичніше залишати в запасі, хай не 20%, нехай 30-50% від витраченого часу — але ж не 200%! Зажирно, знаєте.

Можливо, це правило не діє для маленьких, fine grained tasks, які можна «охопити одним поглядом»? Коли 20% — це лише «обробити напилком», а не, скажімо, «причепити бегемоту вуха, хобот і ще якусь дивну штуку, яку хоче замовник».

У кого які думки?
  • +2
  • 20 червня 2011, 18:00
  • manuna
  • 2

Кишеньковий комп'ютер за 25 $ Повідомлення-посилання

Британець David Braben створив дешевий кишеньковий комп'ютер-брелок, вартістю порядка 25$. І хоча клавіатура та монітор у комплект не входять, зате там є Лінукс!

Бубновий оператор

У JDK 7 з'явиться нова синтаксична конструкція, покликана скоротити кількість коду, потрібного для використання generics. Цей оператор виглядатиме ось так:
<> 

і називатиметься, відповідно до свого вигляду, diamond operator. Діамантовий тобто, або ж, як сказали б затяті картярі — бубновий.

Щоб багато не розписувати, простіше навести приклад:
Map<String, List<String>> anagrams = new HashMap<String, List<String>>();

Цей код у Java 7 можна буде скоротити до такого:
Map<String, List<String>> anagrams = new HashMap<>();


Як можуть помітити користувачі IntelliJ IDEA, остання у 10-й версії відображала ініціалізацію генериків саме так, оскільки їх опис дублювався і подовжував рядок коду. Приємно, що тепер код матиме такий зручний вигляд навіть у vi або Far.

Деальнішу інформацію можна переглянути тут
  • +7
  • 21 квітня 2011, 09:41
  • manuna
  • 9

А ти користуєшся десктопним Linux ? Повідомлення-посилання

За наведеним посиланням вирішили довести, що кількість користувачів десктопних Лінукс-систем переважає 1% від усіх користувачів десктопів.

Tortoise SVN - українська локалізація

Мабуть багато хто користувався цим зручним Windows-клієнтом для SVN. Я також досить довго ним користувався, і врешті вирішив перекласти на українську мову. Переклад був десь на 99% готовий, коли я перебрався на Лінукс і став приділяти проекту все менше уваги. Тим часом, Tortoise SVN розвивався, і наразі «перекладеність» впала до 92%. Залишити його просто так — шкода.
Отже, якщо хтось хоче бачити своє ім'я у титрах — ласкаво прошу долучатися. Я найближчим часом навряд чи перейду на Win, а працювати над проектом, яким не користуєшся — не надто цікаво.