Como usar $ 1 dentro do caminho para uma pasta

0

Sou relativamente novo no Linux e peço desculpas se isso foi solicitado (procurei bastante antes de postar).

Estou criando um script simples para verificar se determinadas combinações de letras estão ocorrendo dentro de um arquivo de backup. O caminho para esses arquivos é dependente do dispositivo e existem MUITOS deles, então eu tenho uma lista dos que eu preciso verificar dentro de um arquivo de texto.

O que eu gostaria de fazer é cat do arquivo e inserir o nome do dispositivo dentro do caminho para essa pasta de dispositivos e, em seguida, verificar o arquivo de backup mais recente. por exemplo,

cat devicelist.txt  | grep A[BCD] /folder1/folder2/$1/latest

Isso me dá o erro: /latest: No such file or directory

Então, o que estou fazendo de errado?

    
por Raitse 03.01.2018 / 08:00

3 respostas

1

Se eu entendi seu requisito corretamente, você pode usar xargs , por exemplo,

cat devicelist.txt | xargs -d'\n' -I{} echo grep 'A[BCD]' "/folder1/folder2/{}/latest"

ou (lendo o arquivo diretamente)

xargs -a devicelist.txt -d'\n' -I{} echo grep 'A[BCD]' "/folder1/folder2/{}/latest"

Remova o echo quando tiver a certeza de que está fazendo o que deseja.

Veja man xargs para mais informações e uma lista completa de opções disponíveis para sua plataforma.

    
por 03.01.2018 / 15:30
0

$ 1 significa parâmetro (primeiro) passado para o script

para que você possa usar

#!/bin/bash
grep A[BCD] /folder1/folder2/"$1"/latest

não gato | grep quando inútil :) "$ 1" permite preservar o conteúdo variável

-bash-4.4$ mkdir test
-bash-4.4$ mkdir -p test/folder/a/latest
-bash-4.4$ cat > t.sh
#!/bin/sh
grep A[BCD] test/folder/"$1"/latest/toto
-bash-4.4$ chmod u+x t.sh
-bash-4.4$ echo ABCD > test/folder/a/latest/toto
-bash-4.4$ ./t.sh b
grep: test/folder/b/latest/toto: No such file or directory
-bash-4.4$ ./t.sh a
ABCD
-bash-4.4$ rm t.sh
-bash-4.4$ rm -rf test
-bash-4.4$ 

você também pode preservar o script para valores de $ 1 que não existem se você quiser evitar a mensagem de erro do grep quando o caminho da pasta não for encontrado.

    
por 03.01.2018 / 08:13
0

Você pode usar

grep 'A[BCD]' "/folder1/folder2/$1/latest" <devicelist.txt

em um script que você chamou com um argumento.

Se você quiser simular o mesmo comportamento no shell, é necessário fazer isso antes:

set -- foo

Então, $1 se torna foo .

    
por 03.01.2018 / 08:15