Proszę o uwagę:
Ja nie pytając, jak zrobić plik z wiersza poleceń!
Używam touch
do tworzenia plików od lat, nie zwracając uwagi, że jego głównym celem jest coś innego. Jeśli chcesz utworzyć plik z wiersza poleceń, istnieje wiele możliwości:
touch foo.bar
> foo.bar
cat > foo.bar
echo -n > foo.bar
printf '' > foo.bar
I jestem pewien, że jest ich więcej.
Ale w rzeczywistości żadne z powyższych poleceń nie jest przeznaczone do tworzenia plików. Na przykład man touch
sugeruje , że to polecenie służy do zmiany znaczników czasu pliku. Dlaczego system operacyjny tak kompletny jak Unix (lub Linux) nie ma polecenia przeznaczonego wyłącznie do tworzenia plików?
bash
shell
command-line
files
Pouja
źródło
źródło
cat
koneksji!more
kiedyless
robi więcej niż tomore
! Lubdir
ils
. Chociaż zdaję sobie sprawę z problemów ze zgodnością.more
przed stworzeniemless
.less
został stworzony specjalnie w celu usunięcia niedociągnięćmore
.more
nadal istnieje z powodów kompatybilności wstecznej.dir
ils
są w większości przypadków tymi samymi plikami wykonywalnymi - różnią się tylko garścią bajtów. Nowe narzędzie przeznaczone specjalnie do tworzenia plików zrobi mniej niż istniejących narzędzi i jako taki byłby to regres, a nie poprawa jak w przypadkuless
vsmore
.Odpowiedzi:
Powiedziałbym, ponieważ prawie nigdy nie jest konieczne tworzenie pustego pliku, którego zawartość nie wypełni się natychmiast w wierszu poleceń lub w skryptach powłoki.
Najpierw tworzenie pliku, a następnie przekierowanie we / wy do zapisu do pliku nie ma absolutnie żadnej korzyści, jeśli można to zrobić w jednym kroku.
W tych przypadkach, w których naprawdę chcesz utworzyć pusty plik i zostawić go, twierdzę, że
> "${file}"
nie może być krótszy i bardziej elegancki.TL; DR : Nie istnieje, ponieważ tworzenie pustych plików najczęściej jest bezużyteczne, aw niektórych przypadkach istnieje już mnóstwo dostępnych opcji, aby osiągnąć ten cel.
Na marginesie: użycie
touch
działa tylko wtedy, gdy plik nie istnieje, natomiast opcje wykorzystujące przekierowanie zawsze obcinają plik, nawet jeśli istnieje (więc technicznie rozwiązania te nie są identyczne).> foo
jest preferowaną metodą, ponieważ oszczędza afork
iecho -n
należy jej unikać, ponieważ jest wysoce nieprzenośna.źródło
>>
). Miałem na myśli przykłady podane przez OP za pomocą>
. Dołączanie byłoby zupełnie bezużyteczne, jeśli chodzi o tworzenie plików (lub NOOP, jeśli istnieją).noclobber
nie trzeba tego ustawiać, aby>
zastąpić istniejący plik.alias rm='rm -i'
zamiastalias rmi='rm -i'
jest złym pomysłem.> .file
w samym wierszu poleceń, zrobi to doskonale bez:
.Odpowiedź Adriana Frühwirtha jest słuszna. Chciałem tylko dodać, że nie jest właściwie komenda specjalnie napisany do tworzenia plików:
mktemp
.To prawda,
mktemp
że zadaniem nie jest tworzenie pliku o określonej nazwie, lecz po prostu tworzenie pliku . Jednak, jak już powiedziano, istnieje wiele bardziej wydajnych i eleganckich sposobów tworzenia plików o danej nazwie, dlatego podanie polecenia byłoby bezcelowe.To powiedziawszy, masz również
truncate
ifallocate
których celem jest tworzenie plików. Po prostu mają bardziej wyrafinowane podejście. Nigdy nie będzie prostego programu, który robi to, co> file
robi, ponieważ nie ma sposobu, aby byłby lepszy niż> file
.źródło
Większość podstawowych narzędzi powłoki nie została zaprojektowana w żadnym konkretnym celu. Większość podstawowych narzędzi powłoki zaprojektowano wyłącznie do interakcji z innymi, aby osiągnąć cel. A może należy powiedzieć, że większość narzędzi robi tylko jedną bardzo podstawową rzecz, niezależnie od tego, jak można je połączyć, aby osiągnąć cel.
To tworzy pusty plik. Lub obcina istniejący plik, jak chcesz. Możesz:
aby uniknąć jakiejkolwiek możliwości tego drugiego przypadku, chyba że:
Możesz uzyskać podobne zachowanie do
touch
:Tyle że
:
nie zaktualizuje modtime pliku, ponieważ nie jest modyfikowany.PRÓBNY
WYDAJNOŚĆ
NIE DOTYKAJ
WYDAJNOŚĆ
źródło
\n
na końcu linii. Spróbujecho -n >echo-n.file
(rozmiar = 0) iecho -e >echo-e.file
(rozmiar = 1)cat
. Dlaczego masz polecenie do wyświetlenia jednego pliku, skoro możesz wykonać jedno polecenie, aby połączyć wiele plików w standardowe wyjście?Narzędzie
install
jest rzeczywiście przeznaczone do tworzenia plików! Możesz przekazać zawartość pliku przez/dev/stdin
(w większości przypadków jednak w większości wersji Linuksa, wymaga/proc
to zamontowania) lub podać inny plik źródłowy. Możesz ustawić własność i uprawnienia.jako głupi przykład.
źródło