GNU/Linux >> Znalost Linux >  >> Linux

Ponechá příkaz Shuf File> File prázdný soubor, ale podobné příkazy ne?

Tato otázka zde již obsahuje odpovědi :Proč `cat`ning soubor do sebe vymaže to? [duplikát]

(2 odpovědi)
Uzavřeno před 2 lety.

Vím, že se jedná o jakýsi duplikát jiné otázky (Proč mi tento příkaz řazení dává prázdný soubor?), ale chtěl jsem otázku rozvést v reakci na uvedené odpovědi.

Příkaz

shuf example.txt > example.txt

Vrátí prázdný soubor, protože shell soubor před zamícháním zkrátí a ponechá pouze prázdný soubor k náhodnému promíchání. Nicméně,

cat example.txt | shuf > example.txt

vytvoří zamíchaný soubor podle očekávání.

Proč metoda potrubí funguje, když jednoduché přesměrování nefunguje? Pokud je soubor před spuštěním příkazů zkrácen, neměla by druhá metoda také ponechat prázdný soubor?

Přijatá odpověď:

Problém je v tom, že > example.txt začne zapisovat do tohoto souboru před shuf example.txt začne to číst. Takže zatím nebyl žádný výstup, example.txt je prázdné, shuf přečte prázdný soubor a jako shuf v tomto případě neprovede žádný výstup, konečný výsledek zůstane prázdný.

Váš druhý příkaz může trpět stejným problémem. > example.txt může zabít soubor před cat example.txt začne to číst; záleží na pořadí, v jakém shell tyto věci provádí, a na tom, jak dlouho to trvá cat skutečně otevřít soubor.

Chcete-li se těmto problémům zcela vyhnout, můžete použít shuf example.txt > example.txt.shuf && mv example.txt.shuf example.txt .

Nebo můžete použít shuf example.txt --output=example.txt místo toho.


Linux
  1. Příkaz „java“ nespustí JVM, který byl nainstalován

  2. Malý trik:pomocí shuf vyberte náhodný soubor nebo řádek v souboru

  3. soubor:příkaz nenalezen

  1. Jak příkaz stat vypočítá bloky souboru?

  2. Vypsáno jádro, ale soubor jádra není v aktuálním adresáři?

  3. Příkaz sed pro Linux nemění cílový soubor

  1. Návod Shuf Command s příklady pro začátečníky

  2. Proč regulární výraz funguje v X, ale ne v Y?

  3. Jak uložit výstup tohoto příkazu awk do souboru?