Тільки охоплює 1) вашого питання.
Природно, API завжди можуть змінюватися за бажанням своїх творців і, таким чином, ламати залежне програмне забезпечення будь-якою мовою. Однак, чудова ідея «API» інструментів вводу / виводу інструментів Unix полягає в тому, що його практично немає (можливо, 0x0a
як кінець рядка). Хороший сценарій фільтрує дані за допомогою інструментів Unix, а не створює їх. Це означає, що ваш скрипт може зламатися через те, що змінилися параметри вводу або виводу, але не тому, що формат вводу / виводу (знову ж таки, насправді не існує) окремих інструментів, що використовуються в сценарії, змінився (тому що насправді щось не існує насправді не можна змінити).
Переглядаючи список основних інструментів, мало би я також приписував виробника , на відміну від лише фільтра:
- wc - кількість друку байтів, слів, рядків - дуже простий формат, таким чином, абсолютно неправдоподібний для зміни, і, крім того, не дуже ймовірно, що він буде використаний у сценарії.
- різниця - там розвивалися різні формати виведення , але я не чув про якісь - яких проблем. Також зазвичай не використовується без нагляду.
- дата - Тепер ми справді повинні дбати про те, що ми виробляємо, особливо стосовно локальної системи. Але в іншому випадку вихідний формат є RFC'ed, якщо ви точно не вказуєте його самостійно.
- cal - не будемо говорити про це, я знаю, що вихідний формат дуже сильно відрізняється між системами.
- Ls , який , ж , останній - я не можу допомогти , якщо ви хочете , щоб розібрати логінсервера, просто не судилося. Крім того, хто, з останнього, більш інтерактивні листи; Якщо ви використовуєте їх у сценарії, вам потрібно подбати про те, що ви робите.
- час було вказано на іншій посаді. Але так, це те саме, що і з ls. Більше для інтерактивного / локального використання. І вбудований bash дуже відрізняється від версії GNU, і версія GNU має нефіксовані помилки протягом багатьох років. Просто не покладайтеся на це.
Ось інструменти, які очікують, що певний формат введення буде більш конкретним, ніж байт-потік:
- bc , dc - калькулятори. Уже в більш хакерській стороні речей (насправді я не використовую їх у сценаріях), і, мабуть, дуже стабільні формати вводу / виводу.
Є ще одна область із значно більшим ризиком поломки, а саме інтерфейс командного рядка. Більшість інструментів мають різні функції як у системах, так і на часовій шкалі. Приклади є
- Усі інструменти, що використовують regex - regex, можуть змінювати значення на основі системної локальності (наприклад, LC_COLLATE), і існує багато тонкощів і особливостей в реалізаціях regex.
- Просто не використовуйте фантазійні перемикачі. Ви можете легко використовувати,
man 1p find
наприклад, для читання пошукової сторінки POSIX знайти замість системної сторінки. У моїй системі мені потрібні встановлені manpages-posix.
І навіть при використанні таких перемикачів, як правило, помилки не будуть введені тонко і отруюють ваші дані. Більшість програм просто відмовляться працювати з невідомим комутатором.
На закінчення я б сказав, що оболонка насправді має потенціал бути однією з найбільш портативних мов (вона портативна, коли ви переносите сценарій на портативному рівні). Порівняйте з улюбленими мовами сценаріїв, де трапляються тонкі помилки, або з вашою улюбленою компільованою програмою, яка перестане компілювати.
Крім того, в рідкісних місцях, де може статися поломка через несумісність, це, мабуть, не через час, а через різноманітність у різних системах (тобто, якщо це працює для вас, це було зроблено за 20 років до і буде через 20 років теж). Це є наслідком простоти інструментів.