Skrócony formularz może być powiązany z powłoką, podczas gdy touch jest samodzielnym poleceniem. Dlatego krótka forma zależy od tego, z której powłoki korzystasz (a ludzie mają silne preferencje w tym obszarze), ponieważ być może nie wszystkie z nich zapewniają skrót. touchsamodzielność będzie działać w ten sam sposób, niezależnie od tego, czego powinieneś używać.
Pierwszy przykład powinien być edytowany : >> filelub nawet >> file, aby miały ten sam efekt, tj. NIE niszczą zawartości pliku.
user000001
2
touchprzede wszystkim aktualizuje mtime. W przeciwieństwie do tego nie opróżnia istniejącego pliku >.
rexkogitans
2
Żadne polecenie „nie tworzy pustego pliku”; mają ten wynik tylko wtedy, gdy plik jeszcze nie istnieje. Aby zagwarantować pusty plik, potrzebujesz > file.
Alexis
Odpowiedzi:
47
Nie musisz nawet używać :; możesz po prostu > file(przynajmniej w bash; inne powłoki mogą zachowywać się inaczej).
W praktyce nie ma tutaj prawdziwej różnicy (choć drobny narzut związany z wzywaniem /bin/touchto rzecz).
touch, jednak można go również użyć do zmodyfikowania znaczników czasu w pliku, który już istnieje, bez zmiany lub usunięcia zawartości; ponadto > filezdmuchnie wszystko, fileco już istnieje. Można to obejść, używając zamiast tego >> file.
Inną różnicą touchjest to, że możesz utworzyć (lub zaktualizować znacznik czasu) wielu plików jednocześnie (np. touch foo bar baz quux) Z bardziej zwięzłą składnią niż z przekierowaniem, gdzie każdy plik wymaga własnego przekierowania (np >foo >bar >baz >quux.).
Używanie touch:
$ touch foo; stat -x foo; sleep 2; touch foo; stat -x foo
File:"foo"Size:0FileType:RegularFileMode:(0644/-rw-r--r--)Uid:(991148597/redacted)Gid:(1640268302/redacted)Device:1,5Inode:8597208698Links:1Access:FriMay2510:55:192018Modify:FriMay2510:55:192018Change:FriMay2510:55:192018File:"foo"Size:0FileType:RegularFileMode:(0644/-rw-r--r--)Uid:(991148597/redacted)Gid:(1640268302/redacted)Device:1,5Inode:8597208698Links:1Access:FriMay2510:55:212018Modify:FriMay2510:55:212018Change:FriMay2510:55:212018
Korzystanie z przekierowania:
$ > foo; stat -x foo; sleep 2;>> foo; stat -x foo
File:"foo"Size:0FileType:RegularFileMode:(0644/-rw-r--r--)Uid:(991148597/redacted)Gid:(1640268302/redacted)Device:1,5Inode:8597208698Links:1Access:FriMay2510:55:212018Modify:FriMay2510:56:252018Change:FriMay2510:56:252018File:"foo"Size:0FileType:RegularFileMode:(0644/-rw-r--r--)Uid:(991148597/redacted)Gid:(1640268302/redacted)Device:1,5Inode:8597208698Links:1Access:FriMay2510:55:212018Modify:FriMay2510:56:252018Change:FriMay2510:56:252018
Wygląda na to, >> fileże nie zaktualizuje czasu modyfikacji. Nie tego, czego szuka OP, ale chciałbym tylko podkreślić, że nie jest to kompletna alternatywa dla dotyku.
Jesse_b
2
Ponieważ pytanie nie określa konkretnej powłoki. Warto wskazać, że > filew zsh jest równoważne cat > file, a nie : > file.
JoL
Ponadto, tcsh pozwala : > file, ale nie działa > file. Może równoważność > fileto : > filejest ograniczona do bourne shell i bash?
JoL
+1 dla dokładności, jednak pamiętać, że na kilka muszli nurtu (ja nawet odgadnąć wszystkich lub większości powłok, ponieważ najbardziej prosta implementacja byłaby przyczyna to naturalnie do pracy jako efekt uboczny), można dotknąć wielu plików za pomocą powłoki przekierowanie: : >foo >baralbo : >>foo >>barbędzie dotknij zarówno fooi bar.
mtraceur
Żeby być pedantycznym z powodu kontekstu rzeczywistego pytania tutaj, ale : >foo >barnie będzie touchplików; przekieruje wyjście (zerowe) :na pliki. touchdotknie plików. (:
DopeGhoti
32
Ponieważ możesz touchjednocześnie pobierać wiele plików bez wpisywania dodatkowych znaków specjalnych. Obejmuje to rzeczy takie jak rozwijanie nawiasów klamrowych, np touch file{1,2,3,4}.
Innym problemem jest to, że pisząc samouczek, ważne jest, aby zdać sobie sprawę, że czytelnicy prawdopodobnie nie są zbyt dobrze zorientowani w temacie. Proste polecenie może być znacznie bardziej zrozumiałe niż dziwnie wyglądająca kombinacja znaków innych niż litery. Spodziewałbym się, że jest wielu zwykłych użytkowników powłok, którzy nie wiedzą, co to :jest, z tego prostego powodu, że tak naprawdę nic nie robi . Podobnie w przypadku zwykłego > foobez polecenia: nawet jeśli wiesz, co to jest przekierowanie, przekierowanie bez źródła może być nieintuicyjne.
Również tutaj na unix.se często piszemy próbki poleceń z wiodącym znakiem dolara, aby wskazać monit. Znaki specjalne na początku wiersza mogą być z tym mylone. (Zauważ, że istnieją systemy i powłoki, które używają >jako części domyślnego monitu).
A jeśli polecenie nie jest w pełni zrozumiałe, zawsze występuje „dotyk człowieka”. Wątpię, aby „man:> plik” zwrócił cokolwiek przydatnego :-) Również podpowiedzi WRT, niektóre (być może większość) pozwalają ustawić monit tak, aby był dowolny. Mój pokazuje nazwę systemu (ponieważ używam wielu zdalnych xtermów) i bieżący katalog i jest ustawiony na różne kolory dla różnych systemów.
jamesqf
1
@jamesqf, tak. Teraz oczywiście istnieje również help :dokumentacja dla powłoki. Ale to wymaga rozpoznania :jako polecenia samego w sobie, pamiętania, że nie wszystko ma stronę :podręcznika , i wreszcie, możliwości znalezienia się w dokumentacji. Ostatnia część może być dość trudna. : D
ilkkachu
@jamesqf i tak, głównie miałem na myśli ostatni znak domyślnego monitu.
ilkkachu
1
+1 za wskazanie aspektów intuicyjnych i niezrozumiałych konstrukcji.
mtraceur
@ilkkachu: Tak. Znalezienie dwukropków w dokumentacji nie jest takie trudne: znalezienie tego, który nie jest tylko interpunkcją, to inna sprawa :-)
jamesqf
18
Cóż, dla mnie głównym powodem jest czytelność. Gdy touch filewiesz, co się dzieje, nawet ktoś niezbyt wykształcony w skryptach powłoki wie, co się dzieje. A jeśli nie, łatwo to zrobić man touchi zobaczyć:
A FILE argument that does not exist is created empty
W przypadku takich tajemniczych rzeczy, jak :i >, trudniej jest wiedzieć, co się dzieje, a ponieważ nie ma prawdziwej przewagi, nie trzeba z tego korzystać.
Wyobraź sobie, że szukasz jednego ze swoich starych skryptów powłoki, o których pamiętasz tylko, że tworzony jest plik znacznika w / tmp. Łatwo jest grepować wszystkie swoje pliki * .sh dla słowa „dotyk”. W zamian za dwukropek przyniesie wiele fałszywych trafień, jeśli nie wiesz, której dokładnie nazwy pliku szukać.
touch
samodzielność będzie działać w ten sam sposób, niezależnie od tego, czego powinieneś używać.: >> file
lub nawet>> file
, aby miały ten sam efekt, tj. NIE niszczą zawartości pliku.touch
przede wszystkim aktualizuje mtime. W przeciwieństwie do tego nie opróżnia istniejącego pliku>
.> file
.Odpowiedzi:
Nie musisz nawet używać
:
; możesz po prostu> file
(przynajmniej wbash
; inne powłoki mogą zachowywać się inaczej).W praktyce nie ma tutaj prawdziwej różnicy (choć drobny narzut związany z wzywaniem
/bin/touch
to rzecz).touch
, jednak można go również użyć do zmodyfikowania znaczników czasu w pliku, który już istnieje, bez zmiany lub usunięcia zawartości; ponadto> file
zdmuchnie wszystko,file
co już istnieje. Można to obejść, używając zamiast tego>> file
.Inną różnicą
touch
jest to, że możesz utworzyć (lub zaktualizować znacznik czasu) wielu plików jednocześnie (np.touch foo bar baz quux
) Z bardziej zwięzłą składnią niż z przekierowaniem, gdzie każdy plik wymaga własnego przekierowania (np>foo >bar >baz >quux
.).Używanie
touch
:Korzystanie z przekierowania:
źródło
>> file
że nie zaktualizuje czasu modyfikacji. Nie tego, czego szuka OP, ale chciałbym tylko podkreślić, że nie jest to kompletna alternatywa dla dotyku.> file
w zsh jest równoważnecat > file
, a nie: > file
.: > file
, ale nie działa> file
. Może równoważność> file
to: > file
jest ograniczona do bourne shell i bash?: >foo >bar
albo: >>foo >>bar
będzie dotknij zarównofoo
ibar
.: >foo >bar
nie będzietouch
plików; przekieruje wyjście (zerowe):
na pliki.touch
dotknie plików. (:Ponieważ możesz
touch
jednocześnie pobierać wiele plików bez wpisywania dodatkowych znaków specjalnych. Obejmuje to rzeczy takie jak rozwijanie nawiasów klamrowych, nptouch file{1,2,3,4}
.Innym problemem jest to, że pisząc samouczek, ważne jest, aby zdać sobie sprawę, że czytelnicy prawdopodobnie nie są zbyt dobrze zorientowani w temacie. Proste polecenie może być znacznie bardziej zrozumiałe niż dziwnie wyglądająca kombinacja znaków innych niż litery. Spodziewałbym się, że jest wielu zwykłych użytkowników powłok, którzy nie wiedzą, co to
:
jest, z tego prostego powodu, że tak naprawdę nic nie robi . Podobnie w przypadku zwykłego> foo
bez polecenia: nawet jeśli wiesz, co to jest przekierowanie, przekierowanie bez źródła może być nieintuicyjne.Również tutaj na unix.se często piszemy próbki poleceń z wiodącym znakiem dolara, aby wskazać monit. Znaki specjalne na początku wiersza mogą być z tym mylone. (Zauważ, że istnieją systemy i powłoki, które używają
>
jako części domyślnego monitu).źródło
help :
dokumentacja dla powłoki. Ale to wymaga rozpoznania:
jako polecenia samego w sobie, pamiętania, że nie wszystko ma stronę:
podręcznika , i wreszcie, możliwości znalezienia się w dokumentacji. Ostatnia część może być dość trudna. : DCóż, dla mnie głównym powodem jest czytelność. Gdy
touch file
wiesz, co się dzieje, nawet ktoś niezbyt wykształcony w skryptach powłoki wie, co się dzieje. A jeśli nie, łatwo to zrobićman touch
i zobaczyć:W przypadku takich tajemniczych rzeczy, jak
:
i>
, trudniej jest wiedzieć, co się dzieje, a ponieważ nie ma prawdziwej przewagi, nie trzeba z tego korzystać.źródło
Wyobraź sobie, że szukasz jednego ze swoich starych skryptów powłoki, o których pamiętasz tylko, że tworzony jest plik znacznika w / tmp. Łatwo jest grepować wszystkie swoje pliki * .sh dla słowa „dotyk”. W zamian za dwukropek przyniesie wiele fałszywych trafień, jeśli nie wiesz, której dokładnie nazwy pliku szukać.
źródło