У меня есть однострочный файл со значением, хранящимся в виде строки в нем:
server-name-2009-August-9-AMI
Имя файла - server_name
. Какой самый короткий и элегантный способ перевести это значение в переменную с помощью bash-скрипта?
Вы можете использовать команду read
. Если вы не предоставите никакой переменной, строка автоматически сохранится в переменной REPLY
в Bash. Если вы предоставите одну переменную, строка будет сохранена в этой переменной. Если вы предоставите несколько переменных, 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
Я рекомендую вам использовать полный путь к файлу, который вы хотите прочитать, а не предполагать, что оба сценария будут в одном каталоге.
Я не буду клясться, что это самое элегантное решение.
Вы можете сделать "полезное использование кошки";)
VAR = $(cat $(dirname $0)/server_name)
Это поместит содержимое файла "имя_сервера", расположенного в том же каталоге, что и ваш скрипт, в $ VAR. Работает независимо от того, где вы запускаете скрипт.