Импортировать переменные из другого файла

Повторная публикация моего комментария в качестве ответа для лучшего форматирования.

Ой, кажется, я полностью пропустил это на странице руководства. pstree -pas PID покажет также родителей, отформатированных в виде дерева, и включает PID процессов.

Пример:

[doktor5000@Mageia5]─[20:06:48]─[~] pstree -pas $$
systemd,1
  └─konsole,9515                    
      └─bash,9517
          └─pstree,9595 -pas 9517
[doktor5000@Mageia5]─[20:06:49]─[~]
1
11.06.2018, 23:11
2 ответа

Como comenté, no puede simplemente generar ese archivo txt, porque no es un script de shell válido.

Para obtener ese valor particular , intente

config=/home/$USER/git_projects/cfhookbash/config.txt
token=$( grep -oP 'www.example.com_token="\K[^"]+' "$config" )
2
27.01.2020, 23:12

En bash, los nombres de variables solo pueden estar formados por caracteres alfanuméricos de un solo -byte o guión bajo (y el primer carácter no puede ser un dígito ).

Entonces, www.example.com_tokenno es un nombre de variable válido, www.example.com_token="asdfasdf"no se reconoce como una asignación sino como un comando simple.

En ksh93 (el shell bashintenta emular ), www.example.com_token="asdfasdf"funcionaría solo si definiera la variable wwwcomo una variable compuesta :

$ compound www
$ www.example.com_token="asdfasdf"
$ typeset -p www
typeset -C www=(example=(com_token=asdfasdf))
$ printf '%s\n' "${www.example.com_token}"
asdfasdf

En bash, posiblemente podría usar una variable de matriz asociativa (una de esas características ksh93 copiadas porbash):

typeset -A token
token[www.example.com]=asdfasdf
printf '%s\n' "${token[www.example.com]}"

(esa sintaxis también debería funcionar en ksh93yzsh).

Si no puede modificar eso config.txtpara que sea compatible con la sintaxis de su shell, posiblemente podría editarlo sobre la marcha antes de evaluarlo. Como (con ksh93, bashozsh):

typeset -A token
. <(sed 's/^\([^=]*\)_token=/token[\1]=/' < config.txt)

Para transformar el x.y_token=a token[x.y]=o:

. <(sed -e :1 -e 's/^\([^=]*\)\.\(.*=\)/\1_\2/; t1' < config.txt)

Para reemplazar cada .a la izquierda del =con _.

Pero tenga cuidado, cualquiera de esos podría hacer reemplazos en lugares donde no se esperan como en:

foo.bar_token="multi
line.x. _token assignment (=)"

O si el expediente no contiene únicamente asignaciones.

Ahora, si ese config.txten realidad no contiene la sintaxis de shell adecuada,desea buscar otros problemas de sintaxis como líneas que contienen foo="price: $12"o foo="x `y' z"donde esos $, `son ​​operadores especiales en la sintaxis de Shell.

6
27.01.2020, 23:12

Теги

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