Preciso de ajuda em um shell script.
Tenho um arquivo “ksnip (1.9.1-continuous).desktop”, no diretório /home/myuser com esse conteúdo:
[Desktop Entry]
Type=Application
Exec=/home/teste/Applications/ksnip-1.9.1-continuous-x86_64_68df098c931e2770b6c198a82ab58525.AppImage
Icon=appimagekit_6c4589a7de8a293b3231312eb83352ad_ksnip
Terminal=false
StartupNotify=false
Name=ksnip (1.9.1-continuous)
GenericName=ksnip Screenshot Tool
Comment=Cross-platform screenshot tool that provides many annotation features for your screenshots.
Categories=Utility;
Actions=Remove;Update;
X-AppImage-Version=1.9.1-continuous
[Desktop Action Area]
Exec=/home/teste/Applications/ksnip-1.9.1-continuous-x86_64_68df098c931e2770b6c198a82ab58525.AppImage -r
Icon=appimagekit_6c4589a7de8a293b3231312eb83352ad_ksnip
Name=Capture a rectangular area
dentro de um shell script quero pegar o valor do que está no primeiro “Icon=”, Ou seja eu preciso que esse valor:
appimagekit_6c4589a7de8a293b3231312eb83352ad_ksnip
e passar para uma variável shell script, como fazer isso?
ICON=$(grep -m1 '^Icon=' arquivo.desktop | cut -d= -f2-)
ICON=$()
→ saída de comando na variável ICON
grep
→ busca de padrão em arquivo ou entrada
-m1
→ restringir às primeiras 1 ocorrências (ou seja, a primeira)
'^Icon='
→ padrão: linhas que começam (^
) com Icon=
|
→ saída de comando torna-se entrada para outro
cut
→ cortar arquivos ou entradas com base num delimitador
-d=
→ especificar =
como delimitador
-f2-
→ do segundo corte em diante (a partir do primeiro =
).
3 curtidas
Obrigado pela ajuda funcionou.
Mas aconteceu algo estranho.
quando o arquivo não tem a extensão declarada no nome do arquivo. Ele da erro: “Arquivo ou diretório inexistente”
ex: o arquivo está salvo assim: ‘ksnip (1.9.1-continuous)’ sem extensão.
#!/bin/bash
ICON=$(grep -m1 '^Icon=' '/home/myuser/ksnip (1.9.1-continuous)' | cut -d= -f2-)
echo $ICON
retorna esse erro:
“Arquivo ou diretório inexistente”
Porém mantendo o nome do arquivo sem extensão, e no script escrevendo a extensão ele funciona normal:
#!/bin/bash
ICON=$(grep -m1 '^Icon=' '/home/myuser/ksnip (1.9.1-continuous).desktop' | cut -d= -f2-)
echo $ICON
retorna:
appimagekit_6c4589a7de8a293b3231312eb83352ad_ksnip
Você usa qual ambiente gráfico?
Me lembro que passei por um momento “coçando a cabeça” no MATE com algo parecido, até perceber que o gerenciador de arquivos dava um tratamento diferenciado a arquivos .desktop
– em vez de ver e editar o nome do arquivo em si, o campo Name=
dentro arquivo era.
Tô usando o Mint Cinnamon x64 X11
Pelo que eu me lembro dele, o Cinnamon tem o mesmo comportamento. Usar mv
no terminal (por exemplo) deve eliminar essa interferência e permitir renomear o arquivo em si.
Este tópico foi fechado automaticamente 3 dias depois da última resposta. Novas respostas não são mais permitidas.