Bash - читати рядок з файлу


1

У мене є однорядковий файл зі значенням, збереженим у ньому як рядок:

server-name-2009-August-9-AMI

Назва файлу - server_name. Який найкоротший, найелегантніший спосіб перенести це значення в змінну за допомогою bash script?

Відповіді:


8

Можна зробити «корисне використання кота»;)

VAR = $(cat $(dirname $0)/server_name)

Це додасть вміст файлу "ім'я_сервера", який знаходиться в тому ж каталозі, що і ваш сценарій, у $ VAR. Працює незалежно від місця запуску сценарію.


1
Сторінка bash man насправді рекомендує $(< file)більше $(cat file).
чепнер

13

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

Приклад:

telemachus ~ $ read < buff
telemachus ~ $ echo $REPLY
#!/usr/bin/env perl
telemachus ~ $ read LINE < buff
telemachus ~ $ echo $LINE
#!/usr/bin/env perl

Зауважте, що змінна призначається без знака долара ( REPLYабо LINE), але коли ви її використовуєте, вам потрібно $REPLYабо $LINE.

Тож ви хочете щось подібне:

read SERVER < /path/to/server_name

Я рекомендую використовувати повний шлях до файлу, який ви хочете прочитати, а не припускати, що два сценарії будуть в одному каталозі.

Я не клянусь, що це найелегантніше рішення.


1
+1 для стислого, повного пояснення прочитаного.
Райан Томпсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.