Как мне прочитать переменную из файла?

Возможно, что библиотеки glib / GTK + в 16.04 слишком стары для Gimp 2.10.x, так что хватит; где библиотеки (и другие зависимости) содержатся в [оснастке], возможно, самый простой вариант.

2.10.0 доступен в виде оснастки ( https://snapcraft.io/gimp ), которая будет автоматически обновляться до более поздней привязки, если / когда более поздние выпуски будут «привязаны». [116 ]

-

Джои Снеддон показал, что Gimp 2.10.4 доступен через Flathub

статья: https://www.omgubuntu.co.uk/2018/07/gimp -2-10-4-выпущено с более быстрым временем запуска-автоматическим выпрямлением

GIMP на Flathub: https://flathub.org/apps/details/ org.gimp.GIMP

Также из статьи Джоя Снеддона неофициальный GIMP AppImage или GIMP PPA Отто Кесселгулаша могут предоставлять более поздние версии (2.10.3 и 2.10.2)

2.10 .3 неофициальный GIMP AppImage https://github.com/aferrero2707/gimp-appimage

2.10.2 GIMP PPA Отто Кессельггулаша: https://launchpad.net/~ Otto-kesselgulasch / + архив / убунт / каркасный

67
задан 18.04.2020, 19:48

10 ответов

Я нашел рабочее решение здесь: https://af-design.com/2009/07/07/loading-data-into-bash-variables/

if [ -f $SETTINGS_FILE ];then
    . $SETTINGS_FILE
fi
3
ответ дан 18.04.2020, 19:49
#! /bin/bash
#  (GPL3+) Alberto Salvia Novella (es20490446e)


variableInFile () {
    variable=${1}
    file=${2}

    source ${file}
    eval value=\$\{${variable}\}
    echo ${value}
}


variableInFile ${@}
0
ответ дан 18.04.2020, 19:50

Учитывая, что вы хотите, чтобы все содержимое вашего текстового файла было сохранено в вашей переменной, вы можете использовать:

#!/bin/bash

file="/path/to/filename" #the file where you keep your string name

name=$(cat "$file")        #the output of 'cat $file' is assigned to the $name variable

echo $name               #test

Или, в чистом виде:

#!/bin/bash

file="/path/to/filename"     #the file where you keep your string name

read -d \x04' name < "$file" #the content of $file is redirected to stdin from where it is read out into the $name variable

echo $name                   #test
54
ответ дан 18.04.2020, 19:50
  • 1
    @user208413 значение $name переменная является строкой из Вашего файла, присвоенного с помощью cat $file команда. Что не является ясным или настолько трудным понять? – Atmaram Shetye 18.04.2020, 19:50
  • 2
    It' s избыточный для использования отдельного $file переменная, если you' ре только с помощью него однажды для загрузки $name переменная, просто используйте cat /path/to/file – dureuill 18.04.2020, 19:51
  • 3
    Я не могу использовать его нигде это мой сценарий потому что dhe сценарий doesn' t знают значение переменной. В нашем случае имя переменной. – Community 18.04.2020, 19:51
  • 4
    Я не хочу отображать переменную, я хочу ту эту переменную, должен быть считан сценарием из последующей обработки. Я попробовал awk, который читает линию за линией. – Christian Convey 18.04.2020, 19:52
  • 5
    Хорошо, удалите echo $name . Я использую его только для теста. Затем можно использовать $name переменная для последующей обработки где угодно, Вы хотите в своем сценарии. – paxdiablo 18.04.2020, 19:52

Если вы хотите использовать несколько строк, вы можете использовать:

path="/foo/bar";
for p in `cat "$path"`;
do echo "$p" ....... (here you would pipe it where you need it) 

ИЛИ

Если вы хотите, чтобы пользователь указал файл

read -e "Specify path to variable(s): " path;
for p in 'cat "$path"';
do echo "$p" ............................
0
ответ дан 18.04.2020, 19:51

Один из альтернативных способов сделать это - просто перенаправить стандартный ввод в ваш файл, где у вас есть весь пользовательский ввод в порядке, ожидаемом программой. Например, с помощью программы (называемой script.sh)

#!/bin/bash
echo "Enter your name:"
read name
echo "...and now your age:"
read age

# example of how to use the values now stored in variables $name and $age
echo "Hello $name. You're $age years old, right?"

и входного файла (называемого input.in)

Tomas
26

вы можете запустить это из терминала в одном из следующие два способа:

$ cat input.in | ./script.sh
$ ./script.sh < input.in

и это будет эквивалентно простому запуску сценария и вводу данных вручную - будет выведена строка «Здравствуйте, Томас. Вам 26 лет, верно?».

Как Раду Рэдяну уже уже предложил , вы можете использовать cat внутри вашего скрипта для чтения содержимого файла в переменную - в этом случае вам нужен каждый файл содержать только одну строку, содержащее только то значение, которое вы хотите для этой конкретной переменной. В приведенном выше примере вы разбили входной файл на файл с именем (скажем, name.in) и файл с возрастом (скажем, age.in) и изменили строки read name и read age на name=$(cat name.in) и age=$(cat age.in) соответственно.

7
ответ дан 18.04.2020, 19:52
  • 1
    @user208413: Какое сообщение (сообщения) об ошибке Вы получаете? " Это doesn' t work" к сожалению, не очень полезное описание проблемы... – Community 18.04.2020, 19:52
  • 2
    Я сделал этот путь, но он все еще наклон создает папку: ( – Greg A. Woods 18.04.2020, 19:53
  • 3
    Изменение это к vh=$(awk "NR==3 {print;exit}" /var/www/test.txt). Вам тогда сохранят строку в переменной $vh, таким образом, можно будет использовать его как так: mkdir "/var/www/$vh" - это создаст папку с указанным именем внутри/var/www. – Vality 18.04.2020, 19:53
  • 4
    У меня есть следующий сценарий: спидобарограф = awk " НОМЕР == 3 {печать; выход} " /var/www/test/test.txt с этим я считал строку 3 из текстового файла под названием test.txt. Как только я получаю строку, я хочу использовать эту строку в качестве входа для создания каталога – jaket 18.04.2020, 19:53

Для чтения переменных из файла мы можем использовать команду source или ..

Предположим, что файл содержит следующую строку

MYVARIABLE="Any string"

, затем мы можем импортировать эту переменную, используя

#!/bin/bash

source <filename>
echo $MYVARIABLE
98
ответ дан 18.04.2020, 19:52
  • 1
    Большой также работает на несколько переменных! Точка @MarkRibau понята, но я предполагаю что, если Вы исправляете файл в различном сценарии и просто должны передать его по его штрафу и управляемый. – αλεχολυτ 18.04.2020, 19:53
  • 2
    Одна причина, почему Вы не могли бы хотеть делать это этот путь, состоит в том, потому что то независимо от того, что находится в <filename>, будет выполнено в Вашей оболочке, такой как rm -rf /, который мог быть очень опасным. – laurent 18.04.2020, 19:53
  • 3
    Можно использовать sed, чтобы добавить local ключевое слово и сделать сценарий немного более безопасным и не загрязнить глобальную область видимости. Таким образом в функция делает cat global_variables.sh | sed -e 's/^/local /' > local_variables.sh и затем использует . ./local_variables.sh. Независимо от того, что Вы импортируете в функции, только будет доступно в той функции. Обратите внимание, что это принимает global_variables.sh, только содержит одну переменную на строку. – laurent 18.04.2020, 19:53
  • 4
    OTOH, это - ответ на вопрос, я спросил Google, и Google принес мне здесь. Странные времена, а? – Keith 18.04.2020, 19:54
  • 5
    Поздно стороне, но, нет, этому doesn' t имеют право быть повышенными ИЛИ как ответ. Это получает другой исходный файл удара, который НЕ является что OP, относительно которого попросили. Он спросил, как считать содержание ФАЙЛА в переменную. НЕ, как выполнить другой сценарий который наборы переменная . Корректный ответ является тем ниже. $ name= (кошка " $file"). – Alan 18.04.2020, 19:54
name=$(<"$file") 

Из man bash:1785 эта подстановка команд эквивалентна name=$(cat "$file"), но быстрее.

3
ответ дан 18.04.2020, 19:53

Я использую это, чтобы получить одну переменную из файла

GET_VAR=$(grep --color=never -Po "^${GET_VAR}=\K.*" "${FILE}" || true)

Когда GET_VAR не найден в ${FILE}, он будет пустым, а не вызовет ошибку благодаря || true.

Он использует grep -P, который находится в GNU grep, но не используется по умолчанию во всех grep на момент написания этого.

0
ответ дан 18.04.2020, 19:53
  • 1
    Этот doesn' t, кажется, работают на меня. Начальный $ бросает ошибку для запрещенного символа – Michael Mrozek 18.04.2020, 19:54

Из вашего скрипта вы можете сделать это:

read name < file_containing _the_answer

Вы даже можете сделать это несколько раз, например. в петле

while read LINE; do echo "$LINE"; done < file_containing_multiple_lines
11
ответ дан 18.04.2020, 19:54
  • 1
    или для файла с несколькими объектами на каждой строке... grep-v ^# файл |while читают b c; действительно повторите a= $a b= $b c= $c;договорились! – dureuill 18.04.2020, 19:55

Краткий ответ:

name=`cat "$file"`
2
ответ дан 18.04.2020, 19:54

Теги

Похожие вопросы