/ / piping e reindirizzamento di risultati strani: shell, riga di comando, pipe, io-reindirizzamento

piping e reindirizzamento di risultati strani: shell, riga di comando, pipe, io-reindirizzamento

Considerando 2 file json:

fileA.json:

{
"foo": "hey",
"bar": "ola"
}

fileB.json:

{
"foo": "hoy"
}

, eseguendo:

% cat fileA.json fileB.json | json

ritorna

{
"foo": "hoy",
"bar": "ola"
}

Ok

--

Ora perché quando si reindirizza lo stdout a fileB.json Ottengo:

% cat fileA.json fileB.json | json > fileB.json

Ottengo:

{
"foo": "hey",
"bar": "ola"
}

Vale a dire: fileA.json ???

PS: json l'utilità è qui: http://trentm.com/json

risposte:

3 per risposta № 1

La shell imposta il reindirizzamento dell'output, > fileB.json, così si apre e tronca fileB.json prima cat ha iniziato a leggerne. Questo causa cat leggere un file vuoto. (Potrebbe persino finire per leggere i dati di output parzialmente scritti).

Non leggere mai e scrivere sullo stesso file in una pipeline. Prova qualcosa del genere > fileC.json anziché.