Metodo per ls e awk contenuto della directory in una variabile shell


1

Sto lottando per trovare un modo per esprimere questo in qualche altro modo che produrrà l'output appropriato:

var="$(ls /var/run/ | grep searchterm | awk {'NR == 2'})"

Ho visto in posti come il shellcheck utilizzare un glob o un loop, ma la mia ricerca finora non ha trovato nulla per farlo in modo da poter ottenere il risultato come una variabile piuttosto che semplicemente echeggiare o stampare il contenuto.

Ci sono metodi per farlo?


Qual è il tuo obiettivo finale che desideri raggiungere acquisendo queste informazioni in una variabile shell? Se modifichi ed espandi la tua domanda per capire perché vuoi farlo, la risposta potrebbe diventare più chiara. Grazie.
StandardEyre

Fa parte di un plug-in personalizzato Icinga che sto scrivendo per me stesso. Ci sono 4 file nella directory - 3 hanno nomi statici - 1 no. Devo valutare il contenuto di questi file per il plugin. Il file con nome non statico ha una parte del nome del file che è statico a se stesso e separato dal resto, che è ciò che è il searchterm grep. La variabile stessa viene utilizzata per eseguire altre azioni in un secondo momento.
Jarrad S

(1) Perché lo stai facendo NR == 2? (2) Se usi awk, dovresti mettere l'intero awkprogramma tra virgolette; ad esempio, '{NR == 2}'con le parentesi graffe all'interno delle virgolette.
G-Man,

Risposte:


0
var="$( find /var/run -iregex "$YOUR_REGEX" 2> /dev/null )"

Certo, man findper imparare alcune limitazioni -iregexdell'opzione.

Se il searchterm non è troppo complesso, è possibile utilizzare -iname "*$SEARCHTERM*"invece.

In generale, analizzare l'output di lsè qualcosa che dovresti davvero evitare.


1
Questo ha funzionato. Ho dovuto usare anche una bandiera di tipo, ma ha funzionato.
Jarrad S

0

Se la tua situazione è

Ci sono quattro file nella directory: tre hanno nomi statici (ad esempio red, bluee green) e uno no. Ma so che il quarto avrà foonel suo nome. Voglio ottenere quel quarto nome di file. Ovviamente, posso tranquillamente cercare foo, perché nessuno dei nomi statici contiene foo.

allora tutto ciò che devi fare è

var="$(echo /var/run/*foo*)"

Se stai lavorando nella directory corrente e lo fai

var="$(echo *foo*)"

e il quarto nome file potrebbe iniziare con un -(trattino), il precedente potrebbe fallire. (Inoltre, uno dei comandi precedenti potrebbe non riuscire se il nome file potrebbe contenere \(barra rovesciata). Ma

var="$(printf '%s' *foo*)"

o

var="$(printf '%s' /var/run/*foo*)"

dovrebbe funzionare.

Naturalmente, se il quarto nome file potrebbe iniziare con un .(punto), hai un altro problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.