Bash (Unix shell)
Bash є оболонкою Unix та командною мовою, написаною Brian Fox для GNU Project як безкоштовне програмне забезпечення, на заміну Bourne shell.[3][4] Випущений в 1989 році,[5] програма набула широкого розповсюдження як оболонка для операційної системи GNU, та як оболонка по замовчанню для Linux та OS X. Вона була портована на Microsoft Windows та розповсюджується з Cygwin та MinGW, на DOS в проекті DJGPP, наNovell NetWare та на Android через різноманітні застосунки емуляції терміналу. В піздніх 1990х, Bash був незначним гравцем серед багатьох загально уживаних оболонок; наразі Bash має приголомшливу перевагу.
Bash є командним процесором, що типово робить в текстовому вікні, де користувач вводить команди, що призводить до дій. Bash може також читати команди з файлу, що називається скриптом. Як всі оболонки Unix, він підтримує глоббінг (співпадіння з замісними символами), канали, here documents (файлові літерали), заміщення команд, змінні та структури керування для перевірки умов та ітерацій. Ключові слова, синтаксис та інші базові функції мови всі були скопійовані з sh. Інші можливості, як історія, були скопійовані з csh та ksh. Bash є оболонкою POSIX, але з декількома розширеннями.
Саме ім'я є акронімом, двозначністю, та описом. Як акроним це означає Bourne-again shell, посилаючись на призначення в вигляді безкоштовної заміни до оболонки Bourne.[6] Двозначна гра слов полягає в звуковій схожісті фрази з born again (знову народжений), термін, що означає духовне відродження.[7][8] Ім'я також описує, що саме робить ця оболонка, від bashing together (згуртуватись разом), поєднує можливості sh, csh та ksh.[9]
Дірка в безпеці Bash датується від версії 1.03 (серпень 1989),[10]повторена як Shellshock, що знайдений в вересні 2014.[11][12]
Зміст
- 1 Історія
- 2
Можливості
- 2.1 Розширення фігурних дужок
- 2.2 Скрипти запуску
- 2.3 Переносимість
- 2.4 Клавіатурні скорочення
- 2.5 Управління процесами
- 2.6 Conditional Execution
- 2.7 Повідомлення про помилки
- 3 See also
- 4 References
- 5 External links
Історія
Brian Fox (Браян Фокс) почав кодувати Bash 10 січня 1988 року,[13] після того, як Richard Stallman (Річард Столлмен) перестав задовільнятись відсутністю прогреса, зробленого попередні розробником.[3] Столлмен та Free Software Foundation (FSF) визнали безкоштовну оболонку, що може виконувати існуючі скрипти оболонки, стратегічною для повністю безкоштовної системи, побудованою з коду BSD та GNU. Цей проект був один з небагатьох, що вони фінансували власно, та Фокс отримав роботу як службовець FSF.[3][14] Фокс реалізував Bash як бета, версію .99, 7 липня 1989 року,[5] та залишався головою підтримки до десь середини 1992,[15] або навіть 1994,[16] після чого він розійшовся з FSF,[17] та його відповідальність була передана до іншого ранішнього контрибутора Chet Ramey.[18][19][20]
В вересні 2014 року Stéphane Chazelas, спеціаліст в Unix/Linux, мережах та телекомі, що працює в UK,[21] знайшов баг безпеки в програмі. Баг, вперше знайдений 24 вересня, був названий Shellshock та отримав номери CVE-2014-6271, CVE-2014-6277[22] та CVE-2014-7169. Баг був визнаний як важливий, оскільки CGI скрипти, що використовують Bash, можуть бути вразливі, дозволяючи виконання довільного коду. Баг покладається на те, як Bash передає визначення функцій до під-оболонки через змінні оточення.[23]
Можливості
Цей розділ потребує розширенняв напрямку : Bash ${PIPESTATUS[*]}[1][2]. (August 2015) |
Синтаксис Bash команд
є надмножиною
з синтаксису оболонки Bourne. Bash може виконувати переважну
більшість скриптів оболонки Bourne без модифікації, за винятком
скриптів оболонки Bourne, що спіткаються об побічну поведінку
синтаксису, що інтерпретується інакше в Bash, або намагаючись
виконувати системні команди, що вбудовані в новіший Bash, таке інше.
Синтаксис команд Bash включає ідеї, висунуті в Korn shell (ksh) та C shell (csh), як редагування командного
рядка, історія
команд, стек каталогів,
змінні $RANDOM
та $PPID
, та синтаксис підстановки
команд POSIX $(…)
.
Коли користувач натискає клавішу табуляції в інтерактивній командній оболонці, Bash автоматично використовує завершення командного рядка для частково спіівпадаючих імен програм, імен файлів та іменами змінних. Система завершення командного рядка Bash є дуже гнучкою, здатна до настроювання, та часто надходить разом з функціями, що завершують аргументи та імена файлів для окремих програм та завдань.
Синтаксис Bash має багато розширень, що відсутні в оболонці Bourne.
Bash може виконувати цілі обчислення ("арифметичні обчислення") без
створення зовнішнього процесу. Він використовує синтаксис
команди ((…))
та змінну $((…))
для
ціх цілей. Цей синтаксис спрощує перенаправлення вводу/виводу.
Наприклад, можна перенаправити стандартний вихід (stdout) та стандартні
помилки (stderr) одночасно, з використанням оператору &>
.
Це простіше, ніж набирати еквівалентну команду оболонки Bourne 'command
> file 2>&1
'. Bash підтримує підміну процесу з використанням
синтаксиса <(command)
та >(command)
,
що підставляє вихід (або вхід) команди там, де звичайно
використовується ім'я файла. (Це реалізовано через неіменовані
канали /proc/fd/ на системах, що підтримуєть це, або через
тимчасові іменовані
канали, в разі необхідності).
Коли використовуєтся ключове слово 'function', декларації функцій Bash не сумісні зі скиптами Bourne/Korn/POSIX (оболонка Korn має ту ж проблему, коли використовує 'function'), але Bash сприймає такй самий синтаксис функцій, як і оболонки Bourne та Korn, та є сумісним з POSIX. Завдяки цьому, та іншим відмінностям, скрипти оболонки Bash рідко виконуються під інтерпретаторами оболонок Bourne або Korn, за винятком коли скрипт писався навмисно з сумісністю на думці, що стає все рідшим, бо Linux стає більш поширеним. Але в режимі POSIX[24] відповідність Bash до POSIX є майже ідеальною.[citation needed]
Bash підтримує літеральні
документи. Починаючи з версії 2.05b Bash може перенаправляти стандартний
вхід (stdin) з літерального аргументу "here string" з
використанням оператора <<<
.
Bash 3.0 підтримує внутрішньо-процесові перевірки на співпадіння з регулярними виразами, використовуючи синтаксис, що копіює Perl.[25]
Bash 4.0 вводить підтримку для асоциативних масивів.[24][26] Асоциативні масиви дозволяють несправжню підтримку для багато-вимірних (індексованих) масивів, в спосіб, подібний до AWK:
declare -A a # декларувати асоціативний масив 'a', що виглядає як двовимірний масив
i=1; j=2 # ініціалізуємо деякі індекси
a[$i,$j]=5 # асоціюємо значення "5" з ключем "$i,$j" (тобто, "1,2")
echo ${a[$i,$j]} # друкуємо збереження значення як ключ "$i,$j"
Розширення фігурних дужок
Розширення фігурних дужок, що також називається альтернацією, є можливістю, скопійованого з оболонки C. Вона генерує набір альтернативних комбінацій. Згенеровані результати не мають існувати як файли. Результат кожного розширеного рядка не сортується, та зберігається порядок зліва направо:
echo a{p,c,d,b}e # ape ace ade abe
echo {a,b,c}{d,e,f} # ad ae af bd be bf cd ce cf
Користувачі не мають використовувати розширення фігурних дужок в портабельних скриптах оболонки, оскільки оболонка Bourne не продукує такий самий результат.
#!/bin/sh
# Традиційна оболонка не продукує такий самий результат
echo a{p,c,d,b}e # a{p,c,d,b}e
Коли розширення фігурних дужок комбінується з підстановочними символами, спочатку розкриваються дужки, та потім отримані символи підставляються у звичайний спосіб. Таким чином перелік файлів зображень JPEG та PNG в поточному каталозі може бути отримане таким чином:
ls *.{jpg,jpeg,png} # розширюється до *.jpg *.jpeg *.png - після чого
# обробляють підстановочні символи
echo *.{png,jp{e,}g} # echo покаже тільки розширення, та можливі дужки в дужках
На додаток до альтернації розширення фігурних дужок може використовуватись для створення
послідовних диапазонів з цілих або символів, розділених двома крапками
Новіші версії Bash дозволяють третє ціле для задання інкременту (кроку).
echo {1..10} # 1 2 3 4 5 6 7 8 9 10
echo file{1..4}.txt # file1.txt file2.txt file3.txt file4.txt
echo {a..e} # a b c d e
echo {1..10..3} # 1 4 7 10
echo {a..j..3} # a d g j
Коли розширення фігурних дужок комбінується розширенням змінних,
розширення змінних виконується після розширення дужок,
що в деяких випадках може викликати потребу використовувати вбудовану
функцію eval
:
start=1; end=10
echo {$start..$end} # не в змозі розширитись завдяки порядку розширення
eval echo {$start..$end} # виконується розширення змінних
# після чого обчислюється результуючий рядок
Скрипти запуску
Коли Bash стартує, він виконує команди в різноманітних файлах з крапкою (файли,
імена яких починаються з крапки, вважаються як системні, або
приховані, та можуть приховуватись деякими командами, як ls, не
приймають участі в доповненні командного рядка по табуляції, таке
інше. Інші програми, як mc, ігнорують це, та відображаються їх як
звичайні. прим. перекл.). Хоча вони подібні до скриптових
команд Bash, що мають встановлений дозвіл на виконання
та директиву
інтерпретатора як #!/bin/bash
, файли
ініціалізації, що використовує Bash, не потребують жодного з цього.
Порядок виконання скриптів запуску
Коли запускається інтерактивна логін оболонка
Bash читає та виконує /etc/profile
(якщо він існує).
(Часто цей файл викликає /etc/bash.bashrc
.)
Після читання цього файла він шукає ~/.bash_profile
,
~/.bash_login
, та ~/.profile
в
цьому порядку, та читає та виконує перший серед них, що
існує та може бути прочитаний.
Коли логін оболонка виходить
Bash читає та виконує ~/.bash_logout
(якщо він
існує).
Коли стартує інтерактивна оболонка (але не логін оболонка)
Bash читає та виконує ~/.bashrc
(якщо він існує).
Це може бути придушене, вказуючи опцію --norc
. Опція
--rcfile file
змушує Bash читати та виконувати
команди з file
замість ~/.bashrc
.
Порівняння з стартовими послідовностями оболонок Bourne shell та csh
Елементи Bash походять від оболонки Bourne та csh, та дозволяють обмежене сумісне використання стартових файлів з оболонкою Bourne, та провадять деякі стартові можливості, знайомі для користувачів csh.
Встановлення змінних середовища, що успадковуються
Оболонка Bourne використовує ~/.profile
під час
логіну для встановлення змінних середовища, що під-процес може
успадкувати. Bash може використовувати ~/.profile
в
сумісний шлях, виконуючи його явно зі специфічних для Bash ~/.bash_profile
або ~/.bash_login
як показано нижче. Специфічний для
Bash синтаксис може зберігатись за межами ~/.profile
,
щоб зберігати останній сумісним з оболонкою Bourne.
. ~/.profile
Псевдоніми та фукнції
Є два механізми, псевдоніми
від csh, та більш загальні функції, що значно поширили
можливості, у порівнянні з оболонкою Bourne, де вони не
наслідувались з логін оболонки, та мали бути перевизначені в кожній
суб-оболонці, що від'єднуються від логін оболонки. Хоча є змінна
оточення ENV
, що може мати відношення до проблеми,
обоє, csh та Bash, підтримують стартові файли для
суб-оболонок, що прямо вирішують це питання. В Bash, ~/.bashrc
викликається для інтерактивних суб-оболонок. Якщо визначені
користувачем функції з ~/.bashrc
також бажані в
логін оболонці, ~/.bash_login
може включати рядок нижче після встановлення всіх змінних оточення:
. ~/.bashrc
Команди, що виконуються тільки при логіні (вході) та логауті (виході)
csh підтримує файл ~/.login
для завдань, що
виконуються тільки в процесі першого логіну, таких, як
відображення системного завантаження, статусу дисків, перевірка
електронної пошти, запис часу входу, та інше. Облонка Bourne може
емулювати це в ~/.profile
, але не має наперед
визначеного імені файла. Щоб досягти подібної семантики як в
моделі csh, ~/.bash_profile
може містити рядок нижче, після встановлення оточення та функцій:
. ~/.bash_login
Подібно до цього, csh має файл ~/.logout
,
що виконується тільки коли логін оболонка виходить (завершує
роботу). Еквівалентом Bash є ~/.bash_logout
,
що не потребує окремого встановлення. В оболонці Bourne вбудований
trap
може використовуватись для досягнення подібного ефекту.
Приклад сумісного стартового скрипта Bash
Скелет ~/.bash_profile
нижче сумісний з оболонкою
Bourne, та отримує семантику, подібну до csh для ~/.bashrc
та ~/.bash_login
. Рядок [ -r filename ]
перевіряє, чи filename існує та читається, просто
пропускаючи частину після &&
, якщо ні.
[ -r ~/.profile ] && . ~/.profile # встановлюємо оточення, один раз, синтаксис тільки Bourne-sh
if [ -n "$PS1" ] ; then # чи ми інтерактивні?
[ -r ~/.bashrc ] && . ~/.bashrc # встановлення tty/prompt/function для інтерактивних оболонок.
[ -r ~/.bash_login ] && . ~/.bash_login # любі завдання логіна, тільки для оболонки логіну.
fi
Проблеми операційної системи при старті Bash
Деякі версії Unix та Linux містять стартові
скрипти Bash, загалом в каталозі /etc
. Bash
викликає їх як частину стандартної ініціалізації, але інші стартові
скрипти можуть читати їх в іншому порядку, ніж документовано в
стартовій послодовності Bash. Вміст файлів по замовчанню для
користувача root також має потенційні проблеми, також, як і файли
скелету, що система провадить для нових користувачів під час
створення. Стартові скрипти, що стартують віконну систему X
також можуть робити несподівані речі з користувацькими стартовими
скриптами Bash, в спробі встановити змінні оточення перед
запуском віконного
менеджера. Ці проблеми часто можуть бути адресовані з
використанням файлів ~/.xsession
або ~/.xprofile
, щоб прочитати ~/.profile
— що провадить змінні
оточення, що оболонка Bash відокремлює для потреб віконного
менеджера, такого як xterm
або Gnome
Terminal.
Переносимість
Викликаючи Bash з опцією --posix
або встановлення в set
-o posix
в скрипті призведе до того, що Bash буде дуже
близько відповідати стандарту
POSIX 1003.2[27]
Скрипти оболонки Bash, призначені бути сумісними,
повинні щонайменьше приймати до уваги оболонку Bourne, що він має
заміщувати. Bash має окремі можливості, чких бракує в традиційній
оболонці Bourne. Це включає:[27]
- Окремі розширені опції виклику
- Підстановка команд з використанням нотації $( ) (хоча ця можливість є частиною стантарту POSIX 1003.2)
- Розширення фігурних дужок
- Окремі операції з масивами, та асиціотивні масиви
- Конструкція з розширеними перевірками в двох квадратних дужках
- Арифметичні обчислення в двох дужках
- Окремі операції роботи з рядками
- Підставлення процесів
- Оператор порівняння з регулярними виразами
- Вбудовані можливості, специфічні для Bash
- Копроцеси
Клавіатурні скорочення
Наступні скорочення працюють, коли використовуються прив'зки по замовчанню
(Emacs). Прив'язки Vi
можуть бути ввімкнені за допомогою set -o vi
.[28]
Зауваження: Для скорочень, що включають Alt, ви також можете використовувати Esc замість цього.
Зауваження: Інколи ви мусите використовувати Escзамість Alt, оскільки скорочення з Alt конфліктує з іншим скороченням. Наприклад, в Trisquel 5.0 (дистрибутив Linux), натискання Alt+f не пересуває курсор вперед на слово, але активізує меню "File" у вікні термінала.
- Tab ↹ : Автозавершує починаючи з поточної позиції курсора.
- Ctrl+a : Переміщує курсор на початок рядка (еквівалентно до Home).
- Ctrl+b : Переміщує курсор на символ назад (еквівалентно до ←).
- Ctrl+c : Надсилає сигнал SIGINT в поточний процес, що перериває та закриває його.
- Ctrl+d
- Ctrl+e : (end) переміщує курсор в кінець рядка (еквівалентно клавіші End).
- Ctrl+f : Переміщує курсор вперед на один символ (еквівалентно клавіші →).
- Ctrl+g : Відміняє пошук та повертає оригінальний рядок.
- Ctrl+h : Видаляє попередній символ (те ж саме, що і забій).
- Ctrl+i : Еквівалентно клавіші табуляції.
- Ctrl+j : Еквівалентно клавіші вводу.
- Ctrl+k : Очищує вміст рядка після курсора та копіює його в кліпборд.
- Ctrl+l :
Очищує вміст екрану (еквівалентно команді
clear
). - Ctrl+n : (next) викликає наступну команду (еквівалентно до клавіші ↓).
- Ctrl+o : Виконує команду пошуку команди в історії, та отримує наступний рядок з історії для редагування.
- Ctrl+p : (previous) викликає попередню команду (еквівалентно до клавіші ↑).
- Ctrl+r : (зворотній пошук) викликає останню команду, що включає вказані символи. Другий Ctrl+r викликає настпну за чергою команду, що відповідає пошуку
- Ctrl+s : Переходить назад до наступної більш піздньої команди пошуку (будьте уважні, та не звстосовуйте її в терміналі, оскільки команда також запускає свій XOFF). Якщо ви змінили ваше налаштування XOFF, використовуйте Ctrl+q для повернення .
- Ctrl+t : Обмінює два попередні символи.
- Ctrl+u : Очищує вміст перед курсором, та копіює його в кліпборд.
- Ctrl+v : Якщо наступний ввод також є службовою послідовністю, сприймає його буквально(тобто Ctrl+v Ctrl+h друкує "^H", літеральний забій).
- Ctrl+w : Очищує слово перед курсором, копіюючи його в кліпборд.
- Ctrl+x Ctrl+e : Редагує поточний рядок в програмі $EDITOR, або vi, якщо змінна не визначена.
- Ctrl+x Ctrl+r : Читає вміст файлу inputrc, та вставляє любі прив'язки або присвоєння змінних, що трапляються там.
- Ctrl+x Ctrl+u : Інкрементальний відкат, що окремо запам'ятовується для кожного рядка.
- Ctrl+x Ctrl+v : Показує інформацію щодо версії поточного екземпляру Bash.
- Ctrl+x Ctrl+x : Змінює курсор в його старій позиції. (C-x, оскільки x виглядає як крест).
- Ctrl+y : (yank) додає вміст кліпборду з позиції курсору.
- Ctrl+z :
Надсилає
сигнал SIGTSTP
до поточного завдання, що присупиняє його. Щоб виконувати його в
фоні можна надати команду
bg
. Щоб перенести його з фону на передній план з фону, або з призупиненого стану, можна використовуватиfg ['process name or job id']
(foreground). - Ctrl+_ : Інкрементальний вдкат, що зберігається окремо для кожного рядка.
- Alt+b : (backward) переміщує курсор назад на одне слово.
- Alt+c : Збільшує символ під курсором та переміщує його в кінець слова.
- Alt+d : Обрізає слово після курсора.
- Alt+f : (forward) переміщує курсор вперед на слово.
- Alt+l : Зменшує розмір буков від позиції курсора до кінця слова.
- Alt+r : Відміняє зміни та встановлює рядок з історії.
- Alt+u : Збільшує кожний символ з позиції курсора до кінці поточного слова.
- Alt+. : Вставляє останній аргумент в попередню команду (останнє слово з попереднього елементу історії).
Управління процесами
Оболонка Bash має два режима виконання команд: пакетний режим batch (Unix), та конкурентний режим.
Щоб виконати команди в пакеті (тобто послідовно) вони мусять бути розділені символом ";":
command1; command2
В цьому прикладі після закінчення command1 виконуєтся command2.
Щоб мати конкуренте виконання command1 та command2, вони повинні виконуватись в оболонці Bash наступним шляхом:
command1 & command2
В цьому випадку command1 виконуєтсья в фоні (символ &), безпосередньо повертаючи управління до оболонки, яка виконує command2.
Підсумовуючи:
- Звичайно команда виконуєтсья на передньому плані (
fg
). Управління оболонки повертається до користувача, після того, як команда завершить своє виконання, та спеціальна змінна$!
встановлюється в ID процеса нового відділеного завдання. - Коли за командою іде символ &, вона може виконуватись в
фоновому режимі (
bg
). Оболонка готова для виконання інших команд, одночасно з першою командою. - Програма в робочому стані на передньому плані (
fg
) може бути призупинена за допомогою Ctrl+z - Призупинена програма може відновити роботу в режимі переднього
плана з використанням команди
fg
, або в фоні з використанням командиbg
. - Процес у фоновому режимі може бути заблокований при спробі запису на термінальний пристрій (на відміну на від простого запису в стандартний вивід).
- Оболонка може синхронізуватись з завершенням окремих фонових
завдань за допомогою команди
wait
, надаючи ID процессу або номер завдання, або дочекатись завершення всіх фонових завдань, викликаючиwait
без аргументів.
Умовне виконання
Bash підтримує розділювачі команд "умовного виконання", що дозволяють виконання команд на основі коду завершення, встановлений попередньою командою. Наприклад:
cd "$SOMEWHERE" && ./do_something || echo "An error occurred" >&2
Де ./do_something виконується тільки в випадку, якщо команда cd (зміна каталогу) була "успішною" (повертає код завершення нуль) та команда echo буде виконуватись, якщо люба з команд, cd або ./do_something повертатимуть "помилку" (не-нульовий статус).
Для всіх команд код завершення зберігаєтся в спеціальній змінній $?
.
Bash також підтримує форми
та if ...;then
...;else ...;fi
умовного виконання.case $VARIABLE in $pattern)...;;$other_pattern)...;; esac
- ^ "Bash-4.3 patch list". May 19, 2015. Retrieved May 19, 2015.
- ^ GNU
Project. "README
file".
Bash is free software, distributed under the terms of the [GNU] General Public License as published by the Free Software Foundation, version 3 of the License (or any later version).
- ^ a
b
c
Richard
Stallman (forwarded with comments by Chet Ramey)
(February 10, 1988). "GNU
+ BSD = ?". Newsgroup: comp.unix.questions.
Usenet: 2362@mandrill.CWRU.Edu. Retrieved March
22, 2011.
For a year and a half, the GNU shell was "just about done". The author made repeated promises to deliver what he had done, and never kept them. Finally I could no longer believe he would ever deliver anything. So Foundation staff member Brian Fox is now implementing an imitation of the Bourne shell.
- ^
Hamilton,
Naomi (May 30, 2008), "The
A-Z of Programming Languages: BASH/Bourne-Again Shell",
Computerworld: 2,
retrieved March 21, 2011,
When Richard Stallman decided to create a full replacement for the then-encumbered Unix systems, he knew that he would eventually have to have replacements for all of the common utilities, especially the standard shell, and those replacements would have to have acceptable licensing.
- ^ a b Brian Fox (forwarded by Leonard H. Tower Jr.) (June 8, 1989). "Bash is in beta release!". Newsgroup: gnu.announce. Retrieved October 28, 2010.
- ^ C Programming by Al Stevens, Dr. Dobb's Journal, July 1, 2001
- ^
Richard Stallman (November
12, 2010). "About
the GNU Project". Free Software Foundation.
Archived
from the original on April 24, 2011.
Retrieved March 13, 2011.
"Bourne Again Shell" is a play on the name Bourne Shell, which was the usual shell on Unix.
- ^
Gattol,
Markus (March 13, 2011), Bourne-again
Shell,
retrieved March 13, 2011,
The name is a pun on the name of the Bourne shell (sh), an early and important Unix shell written by Stephen Bourne and distributed with Version 7 Unix circa 1978, and the concept of being "born again".
- ^
Ian
Darwin (June 13, 1989). "at&t-free
ksh (was: job control is a bug, not a feature)". Newsgroup: comp.os.minix. Retrieved March
21, 2011.
Yup, the gnu project's Born Again Shell ("bash") is an attempt at bashing all the features of sh together with many of those from both csh and ksh.
- ^ Chazelas, Stephane (4 October 2014). "oss-sec mailing list archives". Seclists.org. Retrieved 4 October 2014.
- ^ Leyden, John (September 24, 2014). "Patch Bash NOW: 'Shell Shock' bug blasts OS X, Linux systems wide open". The Register. Retrieved September 25, 2014.
- ^ Perlroth, Nicole (September 25, 2014). "Security Experts Expect ‘Shellshock’ Software Bug in Bash to Be Significant". New York Times. Retrieved September 25, 2014.
- ^
Brian
Fox (August 29, 1996), shell.c,
Free
Software Foundation,
Birthdate: Sunday, January 10th, 1988. Initial author: Brian Fox
- ^
Richard Stallman (October 3,
2010). "About
the GNU Project". Free Software Foundation.
Archived
from the original on April 24, 2011.
Retrieved March 21, 2011.
Free Software Foundation employees have written and maintained a number of GNU software packages. Two notable ones are the C library and the shell. ... We funded development of these programs because the GNU Project was not just about tools or a development environment. Our goal was a complete operating system, and these programs were needed for that goal.
- ^ len (g...@prep.ai.mit.edu) (April 20, 1993). "January 1993 GNU's Bulletin". Newsgroup: gnu.announce. Usenet: gnusenet930421bulletin@prep.ai.mit.edu. Retrieved October 28, 2010.
- ^ Ramey, Chet (August 1, 1994). "Bash - the GNU shell (Reflections and Lessons Learned)". Linux Journal. Archived from the original on December 5, 2008. Retrieved November 13, 2008.
- ^ Chet Ramey (October 31, 2010), Dates in your Computerworld interview, retrieved October 31, 2010
- ^ Chet Ramey (June 12, 1989). "Bash 0.99 fixes & improvements". Newsgroup: gnu.bash.bug. Retrieved November 1, 2010.
- ^ Chet Ramey (July 24, 1989). "Some bash-1.02 fixes". Newsgroup: gnu.bash.bug. Retrieved October 30, 2010.
- ^ Brian Fox (March 2, 1990). "Availability of bash 1.05". Newsgroup: gnu.bash.bug. Retrieved October 30, 2010.
- ^ https://www.linkedin.com/pub/st%C3%A9phane-chazelas/7/2a2/834
- ^ https://cve.mitre.org/cgi-bin/cvename.cgi?name=2014-6277
- ^ Huzaifa Sidhpurwala (2014-09-24). "Bash specially-crafted environment variables code injection attack". Redhat.
- ^ a b "6.11 Bash POSIX Mode", The GNU Bash Reference Manual, for Bash, Version 4.1, December 23, 2009, archived from the original on December 3, 2010, retrieved October 26, 2010
- ^
The syntax matches that shown on
the
regex(7)
man page. - ^ "The shell provides associative array variables, with the appropriate support to create, delete, assign values to, and expand them." http://tiswww.case.edu/php/chet/bash/NEWS
- ^ a b Mendel Cooper. "Portability Issues". The Linux Documentation Project. ibiblio.org.
- ^ "BASH Help - A Bash Tutorial". Hypexr.org. October 5, 2012. Retrieved July 21, 2013.
- ^ bashbug(1), die.net
- ^ "Linux / Unix Command: bashbug", apple.com
Зовнішні посилання
Wikimedia Commons has media related to Bash. |
Wikibooks has a book on the topic of: Bash Shell Scripting |
- Official website
- Bash Reference Manual (HTML PS PDF)
- Bash Guide for Beginners article at The Linux Documentation Project
- Advanced Bash Scripting Guide article at The Linux Documentation Project
- Linux Shell Scripting Tutorial (LSST) v2.0 wiki
- "The Comprehensive List of bash Reference Documentation and Examples"
- Useful Bash History Tips and Tricks
- 2008 interview with GNU Bash's maintainer, Chet Ramey
- Working with BASH environment variables
- Video Tutorial for Creating a Bash Script
- Bash commands and examples
- Colorized Bash prompt - how to set up a colorized Bash prompt based on the current connection method (SSH, telnet, etc.).
- jBash Project is a Java Parser for the Bourne Again Shell
- The 'official' channel FAQ for freenode's #bash channel is BashFAQ.
- BASHDB - Bash with a built-in debugger.
- Bash Quick Reference card <-- Dates from 1999 and version 2.02.0 of BASH. Very old. -->
- Beginner Linux Command Line Tutorial - Covers the basics, all the way up to scripting.
- Bash tutorial - A quick tutorial about Bash shell, with the explanation of the most useful commands. Slides provided.