Boş bir dosya oluştururken neden bir 'dokunmatik dosya' yerine ': >> dosya' tercih edilebilir?


33

Bunu şu ana kadar yapabileceğini asla anlamadım:

: >> file

İşlevsel olarak şuna benziyor:

touch file

Kaynakların çoğunun bu kabuk yerleşik yapısına dokunmayı tercih etmesinin bir nedeni var mı?


7
Kısa form kabukla ilişkili olabilir, dokunma ise bağımsız bir komuttur. Bu nedenle kısa biçim, kullandığınız kabuğa (ve insanların bu alanda güçlü tercihlere sahip olmalarına) bağlıdır, çünkü hepsi kısayol sağlamamaktadır. touchBağımsız olmanız, kullanmanız gereken ne olursa olsun aynı şekilde çalışacaktır.
Patrick Mevzek


6
İlk örnek , aynı etkiye sahip olacak şekilde, : >> filehatta >> filedosyanın içeriğini imha etmeyecek şekilde düzenlenmelidir.
user000001

2
touchöncelikle mtime'ı günceller. Bunun aksine mevcut bir dosyayı boşaltmaz >.
rexkogitans

2
Hiçbir komut "boş bir dosya oluşturmaz"; bu sonuç ancak dosya henüz yoksa. Boş bir dosyayı garanti etmek için ihtiyacınız var > file.
alexis,

Yanıtlar:


47

Kullanmanıza bile gerek yok :; sadece > file(en azından bashiçeride; diğer kabuklar farklı davranabilir).

Pratik açıdan, burada gerçek bir fark yoktur (gerçi seslenmenin eksi /bin/touchbir şey olsa da).

touchAncak, içeriği değiştirmeden veya silmeden zaten var olan bir dosyadaki zaman damgalarını değiştirmek için de kullanılabilir; dahası, zaten var > fileolanı uçuracak file. Bu yerine kullanarak çalışılabilir >> file.

Diğer bir fark , her dosyanın kendi yönlendirmesini gerektirdiği (örn. ) , Yeniden yönlendirmeye göre daha özlü bir sözdizimi ile touchaynı anda (örneğin touch foo bar baz quux) birden fazla dosya oluşturmasını (veya zaman damgasını güncellemesini) sağlayabilmesidir >foo >bar >baz >quux.

Kullanarak touch:

$ touch foo; stat -x foo; sleep 2; touch foo; stat -x foo
  File: "foo"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (991148597/redacted)  Gid: (1640268302/redacted)
Device: 1,5   Inode: 8597208698    Links: 1
Access: Fri May 25 10:55:19 2018
Modify: Fri May 25 10:55:19 2018
Change: Fri May 25 10:55:19 2018
  File: "foo"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (991148597/redacted)  Gid: (1640268302/redacted)
Device: 1,5   Inode: 8597208698    Links: 1
Access: Fri May 25 10:55:21 2018
Modify: Fri May 25 10:55:21 2018
Change: Fri May 25 10:55:21 2018

Yönlendirmeyi kullanma:

$ > foo; stat -x foo; sleep 2; >> foo; stat -x foo
  File: "foo"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (991148597/redacted)  Gid: (1640268302/redacted)
Device: 1,5   Inode: 8597208698    Links: 1
Access: Fri May 25 10:55:21 2018
Modify: Fri May 25 10:56:25 2018
Change: Fri May 25 10:56:25 2018
  File: "foo"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (991148597/redacted)  Gid: (1640268302/redacted)
Device: 1,5   Inode: 8597208698    Links: 1
Access: Fri May 25 10:55:21 2018
Modify: Fri May 25 10:56:25 2018
Change: Fri May 25 10:56:25 2018

6
>> fileDeğiştirme zamanını güncellemeyecek gibi görünüyor . OP'nin aradığı şey değil, sadece belirtmek istediği, dokunmanın tam bir alternatifi gibi görünmüyor.
Jesse_b

2
Çünkü soru belirli bir kabuk belirtmiyor. > fileZsh cinsinden cat > filedeğil , eşdeğer olduğunu belirtmek iyi olabilir : > file.
JoL

Ayrıca, tcsh izin verir : > file, ancak err > file. Belki denkliği > fileiçin : > fileBourne kabuk ve bash ile sınırlıdır?
JoL

1 hassaslık için, ancak, kabuk yönlendirme kullanarak birden fazla dosya dokunabilir birçok baskın kabukları üzerinde (en basit uygulama doğal bir yan etkisi olarak çalışmalarına bu neden çünkü ben bile tamamını veya en kabukları tahmin ediyorum) unutmayın: : >foo >barya : >>foo >>barolacak hem dokunma foove bar.
mtraceur

Sadece burada asıl sorunun içeriği nedeniyle bilgiçlik etmek, ancak dosyaları : >foo >barolmayacak touch; bunun (null) çıkış yönlendirir : içine dosyaları. touchdosyalara dokunacaktı. (:
DopeGhoti

32

Çünkü bir touchdefada birden fazla dosya ekleyebilir , herhangi bir ekstra özel karakter yazmadan gidebilirsiniz. Bu, örn touch file{1,2,3,4}.

Başka bir konu, bir öğretici yazarken, okuyucularınızın muhtemelen konuyla ilgili yeterince bilgili olmadıklarını anlamak oldukça önemlidir. Basit bir komut, harf olmayan karakterlerin bazı tuhaf görünüşlü kombinasyonlarından çok daha anlaşılabilir olabilir. Ben ne olduğunu bilmiyorum gündelik kabuk kullanıcıların sayısı vardır beklediğiniz :gerçekten etmediğini basit bir nedenle, bir do şey. Benzer bir ova için > foobir komut olmadan: Bir yönlendirme ne olduğunu bile bile, bir yönlendirme kaynağı olmadan unintuitive olabilir.

Ayrıca, burada, unix.se üzerinde, istemin belirtilmesi için genellikle önde gelen dolar işareti olan komut örnekleri yazıyoruz. Satırın başındaki özel karakterler bununla karıştırılabilir. ( >Varsayılan istemin bir parçası olarak kullanılan sistemler ve mermiler olduğunu unutmayın.)


4
Ve eğer komut tam olarak anlaşılmadıysa, her zaman "insan dokunuşu" vardır. "Man:> file" öğesinin işe yarayacak bir şey döndüreceğinden şüpheliyim :-) Ayrıca WRT, bazılarının (belki de çoğu) isteminizi istediğiniz gibi ayarlamanıza izin verdiğini sorar. Mine, sistem adını (çünkü çok fazla uzak xterms kullanıyorum) ve geçerli dizini gösterir ve farklı sistemler için farklı renklere ayarlanır.
jamesqf

1
@jamesqf, evet. Şimdi, elbette help :, kabuğunuzun dokümantasyon için ellerinde ne varsa var . Ancak bu, :kendi başına bir komut olarak tanınmayı , her şeyin bir adam sayfasının olmadığını ve son :olarak da belgelerde bulunabildiğini hatırlatmayı gerektirir . Son kısım oldukça zor olabilir. : D
ilkkachu

@jamesqf ve evet, çoğunlukla varsayılan istemin son karakterini kastediyordum.
ilkkachu

1
Sezgi ve belirsiz-yapılı-olmayan yönlerini işaret etmek için +1 .
mtraceur

@ ilkkachu: Evet. Dokümantasyonda iki nokta üst üste bulmak o kadar da zor değil: Sadece noktalama işaretlerini bulmak zor bir şey değil :-)
jamesqf

18

Benim için birincil sebep, okunabilirlik. İle touch filebittiğini biliyorum, biri bile oldukça kabuk komut dosyası neler olduğunu biliyor eğitim değil. Ve değilse, bunu yapmak man touchve görmek kolaydır :

A FILE argument that does not exist is created empty

Şifreli şeyler gibi ile :ve >bu ne olup bittiğini bilmek daha zordur ve gerçek bir avantajı var gibi o kullanmaya gerek yoktur.


6

Yalnızca / tmp içindeki bazı işaretleyici dosyalarının oluşturulduğunu hatırladığınız eski kabuk komut dosyalarından birini aradığınızı hayal edin. "Touch" kelimesi için tüm * .sh dosyalarınızı kolayca öğrenebilirsiniz. Hangi tam dosya adını arayacağınızı bilmiyorsanız, iki nokta üst üste tıklatmak bunun yerine birçok yanlış pozitif sonuç verecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.