Wpis z mikrobloga

Linux level noob.

Jak zrobić, żeby polecenia które mają takie samo wejście i wyjście działały poprawnie?

Da się na przykład posortować coś nie tworząc pliku tymczasowego?

sort < plik > plik

nie działa, opróżnia plik. Trzeba zrobić

sort < plik > tmp

mv -f tmp plik

Da się to naprawić? Nie chodzi mi tylko o polecenie sort, ale też o wiele innych.

@anonim1133 @Linux_Shines Wy się znacie, więc wołam. :)

#linux #bash
  • 12
@Linux_Shines: Dokładnie chcę używać poleceń tak, żeby poprawnie zapisywały wynik do tego samego pliku, z którego pobierają dane. Bo zarówno sort, jak i na przykład c++filt przy użyciu:

sort plik

albo

c++filt main.info

niszczą dane. Opróżniają pliki po prostu.

@japer: Niestety nie działa.

@Godlike_Atheist: Nie wiem dlaczego usunąłeś komentarz, bo miałeś rację.

sort
działa. Tylko, że oczywiście to pomaga tylko przy tym jednym poleceniu, a ja chciałbym sposób uniwersalny.
@Onoki: działa jak najbardziej :>

me@localhost:~$ cat test.txt

jkgsdfds

asdas

csdasda

bsadas

me@localhost:~$ cat test.txt | sort > test_sort.txt

me@localhost:~$ cat test_sort.txt

asdas

bsadas

csdasda

jkgsdfds

edit: nie doczytałem, chcesz do tego samego pliku - masz rację, nie działa :D
@Godlike_Atheist: Ależ nie o to chodzi! :( To można uzyskać samym poleceniem

sort test.txt > testsort.txt

i fakt, że zarówno to jak i to co napisałeś działa poprawnie. Ale gdybyś spróbował

sort test.txt > test.txt

to okazałoby się, że test.txt jest plikiem pustym, a nie posortowanym. Mi chodzi właśnie o to, żeby zmiany były dokonane na pliku wejściowym bez konieczności tworzenia pliku tymczasowego, jak na przykład test
sort.txt
@Godlike_Atheist: Ok, ale pytanie sprowokowane było pewnym tutorialem programu lcov, którego autor radzi użyć c++filt na pliku main.info przed wygenerowaniem z niego dokumentacji. I mi właśnie c++filt psuł main.info, więc myślałem że się dowiem, że jest jakieś ogólne rozwiązanie tego problemu. :)

@japer: No tutaj też generujesz plik tymczasowy, w dodatku można zrobić dokładnie to samo co napisałeś znacznie prościej:

sort plik > .tmp && mv -f .tmp plik

Ale