Variável não encontrada pelo wgrep dentro do script

1

Atualmente, estou re-aprendendo scripts de shell. Eu estou fazendo um script que verifica r / EarthPorn e aleatoriamente escolha uma postagem, vá para aquela postagem e baixe a imagem. Em seguida, defina-o como fundo.

Por algum motivo, estou recebendo isso:

URL transformed to HTTPS due to an HSTS policy
--2018-09-09 19:56:10--  https://www.reddit.com/r/EarthPorn
Resolving www.reddit.com (www.reddit.com)... 151.101.125.140
Connecting to www.reddit.com (www.reddit.com)|151.101.125.140|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 485053 (474K) [text/html]
Saving to: ‘STDOUT’

-                         100%[==================================>] 473.68K  1.69MB/s    in 0.3s    

2018-09-09 19:56:12 (1.69 MB/s) - written to stdout [485053/485053]

./wallpaper.sh: 13: ./wallpaper.sh: LINK: not found
http://: Invalid host name.
www.reddit.com/r/EarthPorn/comments/9ef7bi/picture_i_took_hiking_mount_sulphur_banff/

Isso é o que eu tenho até agora:

#!/bin/sh
wget -O - www.reddit.com/r/EarthPorn > file
#1 Get all the post links from the subreddit r/EarthPorn
grep -Po '(?<=href="https://www.reddit.com/r/EarthPorn/comments/)[^"]*' file > links
#2 Fix the links
sed -i -e 's~^~www.reddit.com/r/EarthPorn/comments/~' links
#3 Count the # of posts there are
POST_NUMBER="$(wc -l < links)"
#4 Choose a random number to pick which wallpaper we're going to use
NUMBER=$(shuf -i 1-$POST_NUMBER -n 1)
LINK=$(sed -n ${NUMBER}p < links)
wget -O - "$(LINK)" > picture
echo $LINK
#5 Get the picture link and save it

Portanto, o wget inicial funciona bem e os links contêm os links apropriados. Mas eu não sei porque o segundo wget está dizendo que $ LINK não foi encontrado. Quando faço eco, ele retorna um bom link que eu trabalho bem. Quando eu executo o wget fora do script com o mesmo link, ele funciona perfeitamente. Eu poderia obter algumas dicas?

    
por lanmvil 10.09.2018 / 02:06

1 resposta

2

A seqüência $(...) faz com que o material dentro dos colchetes seja executado e, em seguida, retorna a saída ao chamador.

Então, por exemplo,

mydata=$(grep foobar myfile)

definirá $mydata como os resultados do comando grep .

No seu caso, você só quer que $LINK expanda a variável.

O que você poderia estar pensando é ${LINK} , que é uma forma de impor o escopo da interpretação do nome da variável.

Por exemplo, echo $a_b procuraria a variável a_b , mas echo ${a}_b procuraria a variável a e depois adicionaria _b ao resultado.

    
por 10.09.2018 / 03:02