'Tee'nin amacı nedir?


90

teeGördüğüm tüm kullanımlar şöyle:

 do_something | tee -a logfile

Veya:

do_something_else | tee logfile

Is teeEğer kabuk boru yönlendirmeler ile aynı şeyi yapabilirsiniz bilmiyorum olanlar için icat etti? Gibi:

do_something >> logfile

Veya:

do_something_else > logfile

Neredeyse aynı ve yazmak için daha az klavye isabet alıyor. Hangi gizli özellikleri göremiyorum tee?


62
Bu " man sayfasının ilk satırı " ... ve standart çıktıya ve dosyalara yaz "ile nasıl cevaplanmadı ? Cevaplar ilginç, ancak boruların ne kadar yararlı olduğu hakkında geniş bir şekilde konuşmak, bu Q'nun nasıl geniş göründüğünü pekiştiriyor ve belki de kapatılmış olmalıydı.
Xen2050

3
@ Xen2050 Çok geniş bir yanıt için bir soru suçlanamaz. Şu anki en yüksek puanlı cevap gibi, soru çok özeldir .
Jon Bentley

1
@JonBentley, soru "yeterli bir cevabı tanımlamak için yeterli ayrıntıya sahip belirli bir sorun" gibi görünmüyor (yakın iletişim kutusunun okuduğu gibi). Kulağa şöyle geliyor: "sorunuzun tamamı bir kitap tarafından cevaplanabiliyorsa veya birçok geçerli cevabı varsa (ancak hangisinin - eğer hangisinin doğru olduğunu belirlemenin bir yolu yoksa), bizim biçimimiz için muhtemelen çok geniştir." (Kaynak: Yardım Merkezi )
Xen2050

4
@ Xen2050 Aynı soruyu okuyor muyuz? Bana çok özel görünüyor - tee ve borular arasındaki fark nedir? İki cümle kullanarak bu soruya yeterince cevap verilmiştir. Bütün bir kitaptan uzak. Bazı cevapların bir teğet üzerinde atılmayı seçmesi , sorunun kapsamıyla hiçbir ilgisi yoktur.
Jon Bentley

@JonBentley: Aynı soruyu okuyor muyuz? R Moog tür-çeşit-of ima arasındaki fark nedir - oldukça iyi odaklanmış soru tee ve I / O yönlendirme ?   Diyor aslında “kabuk boru yönlendirmeler gibi >ve >>” kendi lehine bir nokta değil ve aynı belirsiz kapatılması için bir argümandır. Fakat aslında birden fazla soru soruyor: “Amacı nedir tee?”, “ teeKabuk borusu yönlendirmelerinde yapabileceğinizi bilmeyenler için icat edildi mi?” Ve “Hangi gizli özellikleri göremiyorum tee?”. Bu sorulardan en az ikisi çok geniş.
G-Man

Yanıtlar:


242

Görmediğiniz şey do_something | tee -a logfileçıktıyı stdout'a logfile ve stdout'a koyarken sadece logfile'e do_something >> logfilekoyar .

Bunun amacı, teebir 'T' geçişinde olduğu gibi tek bir girdi, çoklu çıktı senaryosu üretmektir.

DÜZENLE

teeKullanımın daha fazla görünmesine olanak tanıyan yorumlar yapıldı sudo. Bu konunun dışında geçerli: cat, ddya da belki daha iyi bufferBirden çıkışları gerekmiyorsa, daha iyi bir performans bu olanağı sağlarız. tee“Yapabileceklerini” değil, tasarladıklarını kullanın .


37
Birden fazla çıkış anahtarıdır. teeaynı anda birden fazla argüman alabilir ve birçok dosyaya yazabilir.
Kamil Maciorowski

20
Ben buna bir bağlantı borusu demeti demeliyim , bir geçiş (yol kavşağında olduğu gibi?)
user20574

7
Örneğin catyerine basit bir şekilde nasıl kullanırım ? çalışmaz, çünkü yönlendirme sudo olmayan kabuk tarafından işlenir. İşe gelince , işe yarıyor, ancak çoğu zaman, özellikle de altında büyük hasar verebilen aşırı güçlü bir araçtır . Örneğin , elimde (veya MacOS) kullanmak zorunda olduğum RedHat veya Ubuntu tabanlı dağıtımların hiçbirine varsayılan olarak yüklenmedi ...teeecho /var/work/core.%p | sudo tee /proc/sys/kernel/core_patternecho /var/work/core.%p | sudo cat > /proc/sys/kernel/core_patternddecho /var/work/core.%p | sudo dd of=/proc/sys/kernel/core_patternddsudobuffer
Digital Trauma

3
@EugenRieck Birincil işlev olmak için in: out arasındaki 1: n ilişkisine dair fikrinizi anlıyorum. Ancak bu durumda ne yerleşik catne de /bin/catbenim için çalışıyor. Nereden catgeldiği önemli değil - >hala üst seviye (sudo olmayan) kabuk tarafından ele alınacak. Avantajı teeover catbu durumda o çıktı dosyası bir komut satırı param (ve yeniden yönlendirme) olarak geçirilecek izin vermesidir. ddHala lehine ediyorum gerçi uygun bir seçenek, kesinlikle teebunun için
Dijital Travma

3
@EugenRieck Ne kabuk vardır catve teeyerleşikleri olarak? Ve sudokabuk yerleşiklerin hangi sürümünü çalıştırabilir?
wjandrea

118

Tee faydasız değil

Belki de zaten bunu biliyordun? Değilse, okumaya devam edin! Veya nasıl çalıştığını biliyorsanız, ama neden var olduğundan emin değilseniz , Unix felsefesine nasıl uyduğunu görmek için sonuna kadar atlayın.

Ne olduğunu amacı tee?

En basitinde standart girdiyle ilgili verileri alır ve bunu standart çıktıya ve bir (veya daha fazla) dosyaya yazar. Bir girişi iki çıkışa (ve iki yöne) bölme biçiminde bir tesisat tee parçasına benzetilmiştir .

Örnekler

İlk örneğinizi ele alalım:

do_something | tee -a logfile

Bu, çıktısını alır do_somethingve kullanıcıya da görüntülerken günlük dosyasına ekler. Aslında, Wikipedia sayfasındakitee ikinci örnek olarak şöyle:

Çıktıyı bir komuttan mevcut bir dosyaya görüntülemek ve eklemek için:

  lint program.c | tee -a program.lint

Bu, bilgisayardaki lint program.c komutunun standart çıktısını görüntüler ve aynı zamanda bunun bir kopyasını program.lint dosyasının sonuna ekler. Program.lint dosyası yoksa, oluşturulur.

Bir sonraki örneğin başka bir kullanımı var: izinlerin arttırılması :

İzinlerin yükseltilmesine izin vermek için:

cat ~/.ssh/id_rsa.pub | ssh admin@server "sudo tee -a /root/.ssh/authorized_keys2 > /dev/null"

Bu örnek, sudokomutta içsel bir sınırlamayı atlamak için kullanılan tee'yi gösterir . sudostandart çıktıyı bir dosyaya bağlayamıyor. Standart çıkış akışını /dev/nullboşaltarak, konsoldaki yansıtılmış çıktısını da bastırırız. Yukarıdaki komut, kullanıcının genel anahtarını sunucunun anahtar yetki listesine yükleyerek mevcut kullanıcıya root erişimini bir sunucuya ssh üzerinden verir.

Ya da belki bir komutun çıktısını almak, bir yere yazmak ve bunu başka bir komuta girdi olarak kullanmak mı istiyorsunuz?

Bir komutun çıktısını bir dosyaya kaydetmek ve aynı çıktıyı başka bir komuta yönlendirmek için tee komutunu da kullanabilirsiniz.

Aşağıdaki komut, crontab girişlerinin bir yedeğini alır ve crontab girişlerini, yerine geçecek olan sed komutuna bir giriş olarak iletir. Değişimden sonra yeni bir cron işi olarak eklenecek.

$ crontab -l | tee crontab-backup.txt | sed 's/old/new/' | crontab –

( Tee komut kullanım örnekleri için kredi )

Tee Unix felsefesiyle çalışır:

Bir şey yapan programları yaz ve iyi yap. Birlikte çalışmak için programlar yazın. Metin akışlarını işlemek için programlar yazın, çünkü bu evrensel bir arayüzdür.

( Unix Felsefesinin Temellerine Kredi )

tee bunların hepsine uyar:

  • bir şey yapar: ekstra bir girdi kopyası yaratır
  • diğer programlarla çalışır, çünkü diğer programların yukarıdaki örneklerde olduğu gibi birlikte çalışmasını sağlayan yapıştırıcıdır (veya eğer isterseniz 'T' sıhhi tesisat parçası).
  • bunu standart girişte verilen bir metin akışını işleyerek yapar

3
@Joe: sudo tee -amuhtemelen daha yeni bir yeniliktir (Ben ilk vikiler özellikle bir şeyler ayarlamak için / Ubuntu kılavuzları gördüm /proc/sysUbuntu geçiş çünkü ben geçiş yaparken, sudoUbuntu varsayılan olarak nasıl yapılandırıldığını tabanlı bir sistemde () kullanmak yerine subir ile root şifresi). Bence teeyırtıcı hayvanlar sudo, bu yüzden var olmak için bir sebep değil tee. Buna gerek yok tee, etkileşimli olarak yazmaktan daha kısa sudo sh -c 'cat > output'.
Peter Cordes

1
Bash gibi modern kabukları ile, teeiki boru hattını besleyebilirsiniz foo | tee >(pipe2) | pipe1. Ya da başka bir eğlenceli ffmpeg ... |& tee /dev/tty | sed 's/.*\r// > encode.logolan durum çizgisi güncellemelerini tty üzerinde etkileşimli olarak görmek ve gerçek kayıt için newline yerine satır başı ile sonuçlanan "satırları" kaldırmaktır. (yani durum satırı güncellemelerini filtreleyin). Genel olarak, tee /dev/ttybir boru hattında herhangi bir yere hata ayıklama baskısı olarak yapıştırabilirsiniz .
Peter Cordes

2
Bu, üzerinde çalışmakta olduğunuz sudo sınırından daha az bir sınırdır ve kabuğun> yorumuna bir sınırlama getirir. Sudo ile bir komut çalıştırdığınızda stdout, kabuk programınıza geri gönderilir ve daha sonra> ile yönlendirmeler, kabuğun izinleriyle çalıştırılır. Yüksek izinlerle yazmak istiyorsanız, boru hattının yükseltilmiş kısmına sahip olmanız gerekir. Tam olarak hangi etkiyi elde edeceğinize bağlı olarak bunu yapmanın birçok yolu vardır. Eğer gerçekten kullanmak istiyorsanız> 'sudo bash -c "komutunu" outfile "' gibi bir şey yapacak.
Perkins,

Kesinlikle, @Perkins. Kabuk, >ayrılmadan önce sudo ayrıştırır ve yönlendirmeyi ayarlar exec, bu yüzden kesinlikle görmediği şeyleri idare etmemesi için bir sudo sınırlaması değildir. :) Genellikle, sudo kendisini tanımlamak yerine bunu açıklarken "sudo iş akışı" veya benzer bir terim olarak adlandırmaya çalışırım.
dannysauer 13:18

sudo tee -aIMHO tee istismarı. Kullanım sudo cat, sudo ddya da (çoğu durumda en iyi performans ile) sudo bufferBirden çıkışları gerekmiyorsa.
Eugen Rieck

70

Neredeyse aynı ve yazmak için daha az klavye isabet alıyor.

Hiç aynı değil ...

Aşağıdakiler biraz eşdeğer gibi gözüküyor, fakat değiller:

$ echo "hi" > test.txt
$ echo "hi" | tee test.txt
hi

Kritik fark, öncekinin verileri yalnızca adlandırılmış dosyaya yazması, ikincisi ise aşağıda gösterildiği gibi hiterminal ( stdout) ve adlandırılmış dosyaya yazmasıdır:

Yönlendirme vs tee


teeEğer bir dosyaya veri yazmasına olanak tanır ve size yararlı şeyler yapmak için izin ileriye yönelik bir boru hattı kullanmak - bir boru hattı bitmeden verileri tutmak gibi:

grep '^look ' interesting_file.txt \
  | tee interesting_lines.txt \
  | sort

Veya, tüm boru hattına yükseltilmiş ayrıcalıklar vermeden yükseltilmiş ayrıcalıklara sahip bir dosyaya yazabilirsiniz (burada echokullanıcı olarak çalıştırılır tee, dosyaya şöyle yazar root):

echo 0 \
  | sudo tee /proc/sys/net/ipv4/ip_forward

İle teebirçok dosyaya yazabilirsiniz ( ve stdout ):

echo "hi" \
  | tee a.txt b.txt

Bir betiğin çıktısını bir dosyaya kaydetmek için kullanmakla execbirlikte tee, bir gözlemcinin ( stdout) verileri görmesine izin vermek de mümkündür :

exec > >( tee output.log )

2
exec > >(tee "$LOGFILE") 2>&1Stdout ve stderr komutunun stdout ve stdout dosyalarının her ikisine de göstermesini sağlayan bir bash betiğinde unutmamak gerekir $LOGFILE.
rexkogitans 10:18

@rexkogitans 2> & 1 cmd toplu iş sözdizimi değil mi?
dmb

@dmb: "send stderr (= 2) stdout (= 1)" ile aynı yere gönderir
psmears

@rexkogitans Gerçekten adil bir soruydu, on yıldan beri "Windoze" kullanmadığını gerçekten bilemiyorum. Kullandığım 2>&1çıkışını bırakın ve pencerelerde dosyaları txt için err.
dmb

1
@dmb Sondaj için üzgünüm. Hepsi psmears'ın yorumu ile ilgili. Açıkçası, Windows burada Unix tarzı benimsemiştir.
rexkogitans 10:18

27

Bu bir tişört:
görüntü tanımını buraya girin

T şeklinde bir boru fitingi. Bir girişi ve iki ayrı çıkışı vardır.
Başka bir deyişle, bir boruyu ikiye böler; yoldaki bir çatal gibi.

Benzer şekilde, standart girişinizi iki ayrı çıkışa yönlendirmenize izin veren teebir pipe ( |) 'dir.


Örnek
Örneğin, sen yaz ls /.
Gibi görünen bir çıktı elde edersiniz:

Applications    Network     Users       bin        dev      net      private    tmp         var
Library         System      Volumes     cores      etc      home     opt        sbin        usr

Çıktıyı bir metin dosyasına yönlendirin ve ls / > ls.txtsadece sonuçta ortaya çıkan metin dosyasında kabukta çıktı gösterilmez.

Çıktıyı görmek ister VE aynı anda bir metin dosyasına iletmek ister misiniz? Piponuza ( )
ekleyiniz, yani:tee|ls / | tee ls.txt


İkisini karşılaştırın:

ls /          >          ls.txt
ls /        | tee        ls.txt

4
Bildiğimiz kadarıyla bin kelimeye
bedel

Bir bahçe hortumu T parçası seçmiş olsaydın, Doug McIlroy'un orijinal metaforuna uygun olacaktın.
JdeBP

@JdeBP Üzgünüm, kim olduğu hakkında hiçbir fikrim yok. O yardımcı programın orijinal yazarı mı? Veri akışı ve fiziksel elektrik akımı çoğu zaman hidrolik sistemlerle karşılaştırılır, ancak muhtemelen bunu biliyorsunuzdur. Her neyse, ben sadece bu tarzı süper basit tutmak için seçtim. Aslında bunu tanıdık tutmak için yapacaktım, ancak bahçe çeşitliliği, aksesuarları, vb. Takmak için daha fazla Y şeklinde ve / veya görsel olarak karmaşık ataşmanlara sahip olma eğiliminde.
sesler

1
Bell Labs'da çalışan ve Ken Thompson'ı Unix'e boru koymak için ikna eden bu ünlü faturanın yazarı M. Douglas McIlroy .
JdeBP

18

Hayır. Gerçekten dosya kullanarak >ve >>operatörleri yönlendirebileceğiniz birkaç örnekten bahsettiniz .

Fakat Tee daha fazlasını yapabilir. Çünkü ona boru bağladığın için başka bir şeye boru bağlayabilirsin.

İyi bir örnek wikipedia sayfasında listelenmiştir :

find "4DOS" wikipedia.txt | tee 4DOS.txt | sort > 4DOSsorted.txt

Temel olarak, Tee'ye yönlendirebilirsin, böylece Tee'den başka bir şeye geçebilirsin. Tek yapmak istediğiniz bir günlük dosyası yazmaksa, evet, o zaman gerçekten Tee'ye ihtiyacınız olmaz.


17

teeyararsızdır. Her zaman kullanırım ve var olmasına sevindim. Bölmek istediğiniz bir boru hattınız varsa, çok faydalı bir araçtır. Çok basit bir örnek, $dtar yapmak istediğiniz bir dizine sahip olmanız ve aynı zamanda paranoyak olmanız (benim gibi) olduğundan ve verileri güvenilir bir şekilde saklamak için depolama ortamına güvenmemeniz için kullanmak zorunda kalmanızdır. Sen olabilir ilk diske yazma ve daha sonra karma, ancak karma edilmeden önce arşiv bozuk alırsa o başarısız olur. Ayrıca, onu okumak zorunda kalacaksınız ve yüzlerce GB büyüklüğündeki dosyalar üzerinde çalışıyorsanız, olması gerekmiyorsa tekrar okumak istemeyeceğinizi bileceksiniz.

Öyleyse yaptığım şey şu:

tar -c "$d" | tee >(sha256sum) >(cat > "$d"".tar") > /dev/null

Katran topunu oluşturur ve onu tee'ye bağlar, daha sonra bir tanesini ve diğerini diske yazdığı iki alt kovana borular.

Büyük bir dosya üzerinde birkaç işlem yapmak istiyorsanız da harika:

< file.tar.gz tee >(sha256sum) >(tar -xz) /other/storage/location/file.tar.gz > /dev/null

Dosyayı bir kez okur, birleştirir (hala olması gerektiği gibi olup olmadığını kontrol edebilirsiniz), çıkartır ve farklı bir konuma kopyalar. Bunun için üç kez okumak gerek yok.


3
Nitpick: teealt kabuklar oluşturmaz; çağıran kabuk çalışır sha5sumve catçıktılarını iletilen dosya tanımlayıcılarına bağlar tee. Ayrıca, bir işe yaramaz kullanımı cat; teeDoğrudan yönlendirmek için giriş yönlendirmesini kullanabilirsiniz file.tar.gz.
chepner

@chepner İlk birleşimde haklısın ama ikincisinde tamamen yanılıyorsun. Boru hatlarımı sırayla yazmaktan hoşlanıyorum, bu yüzden sağdaki girdilerin okunabilirlik için korkunç olduğunu ve bunu yapmak açıkça nesnel bir şekilde yöntemimden aşağı ve tamamen öznel bir tercihim olmadığını gösteriyor. cataşktır. cathayat.
UTF-8

6
< file.tar.gz tee >(sha256sum) ...Yönlendirmelerin sözcük sıralaması hakkında endişeleriniz varsa da yazabilirsiniz . Bu, sadece tek bir dosyayı beslemek için tamamen ayrı bir sürece gerek olmadığı gerçeğini değiştirmez tee.
chepner

1
@chepner Cool, teşekkür ederim! Bugün bir şey öğrendim. :)
UTF-8

1
Başlama maliyeti catnispeten düşüktür. Ekstra 100 GiB yazma + okuma sistemi çağrısı maliyeti, önerilen büyük bir dosya örneği için kesinlikle fazla CPU zamanı ve bellek bant genişliği boşa harcar. Bellek bant genişliğinin, L3 önbelleğinin bu kopyalamaya karşı ekstra kirlenmesinden bahsetmediğinden, tüm çekirdeklerde paylaşılan bir kaynak olduğunu unutmayın. Spectre + Meltdown azaltma etkin olan bir x86'da, sistem çağrıları eskisinden daha pahalıdır. Bu kopya süresince ölçülebilir miktarda ekstra CPU zamanı kullanıyorsunuz. Ayrıca IMO'dan >(cat > foo)daha kolay anlaşılamıyor foo.
Peter Cordes

12

Nitpick @ bertieb'in yazdığı cevabı bu örnekte, sudo komutunda içsel bir sınırlamayı atlamak için kullanılan tee gösterilmiştir. sudo standart çıktıyı bir dosyaya bağlayamıyor.

İçsel bir sınırlama yoktur, sadece komutun nasıl işlendiğine dair yanlış bir anlama gelir.

Örnek:

sudo echo 0 > /proc/sys/net/ipv4/ip_forward

Geçerli kabuk komut satırı ayrıştırır. Çıkış yönlendirmesini bulur ve bunu gerçekleştirir. Ardından sudokalan komut satırını sağlayan ve çalıştırılan komutun argümanları olan komutu çalıştırır. Geçerli kabuğun kök izinleri yoksa, çıkış yeniden yönlendirmesi başarısız olur.

echo 0 | sudo tee /proc/sys/net/ipv4/ip_forward

Bu, çıkış yeniden yönlendirmesinin, teeüzerinden yürütüldüğü için kök izinlere sahip olan komuta ertelendiği için çalışır sudo.

sudo bash -c "echo 0 > /proc/sys/net/ipv4/ip_forward"

Bu, yeniden yönlendirmeyi yapan kabuğun kök izinlerine sahip olması nedeniyle çalışır.


2
Ayrıca, sudokomut için gerekebilir ancak dosyanın çıktısı alınmayabilir ve yönlendirme gayet iyi çalışır:sudo foo-needs-privilege > /tmp/this-output-file-doesnt
Dennis Williamson

10

Diğer kişilerin de belirttiği gibi, teekomutun çıktısının boruya aktarılması, çıktıyı hem dosyaya hem de stdout'a yazar.

teeÇalıştırması uzun süren bir komuttan çıktı almak istediğimde, komutun kullanılabilir hale getirdiği gibi çıktıyı görsel olarak incelemek istediğimde de sıklıkla kullanıyorum . Bu şekilde, çıktıyı incelemeden önce komutun çalışmasını bitirmesini beklemek zorunda değilim.

Henüz söylenmemiş gibi görünen şey (kaçırmamış olduğum sürece), teekomutun aynı anda birden fazla dosyaya yazabilmesidir. Örneğin:

ls *.png | tee a.txt b.txt

*.pngGeçerli dizindeki tüm dosyaları aynı anda iki farklı dosyaya ( a.txtve b.txt) yazacaktır .

Aslında, bununla aynı anda birkaç farklı dosyaya metin yazabilirsiniz tee:

$ tee --append a.txt b.txt c.txt d.txt
These lines are appended to four different files,
and are also written to stdout.
CTRL-D

9

Tişörtün en yaygın kullanımı, dosyadaki (veya dosyalara) gönderdiğiniz sırada terminaldeki metni görmektir. Sorunuzun ifadesi, yalnızca günlük dosyalarına yalnızca metin yazdığınızı varsayar. Dosyaları tetiklemek için dosya adları veya dizin adları yazan komut dosyalarım var (eşzamanlı olmayan diğer komut dosyaları tarafından işlenecek) ve aynı içeriği stdout'a göndermek için tee kullanıyorum. Tüm stdout, günlüklere yönlendirilir. Böylece istediğim yerde metnim var ve bunu yaptığım bir günlük kaydı var, hepsi tek bir 'echo' ifadesinden

tee aynı zamanda birden fazla aynı dosyayı yapmak için Unix'te en iyi yöntemdir. Bazen, çok sayıda boş dosya oluşturmak için kullanırım, bunun gibi ...

:|tee file01 file02 file03

5
neden olmasın touch? (daha ne olduğu hemen belli oluyor)
Attie

@Attie touchzaten varsa, dosyaları kesmeyecek , ancak yalnızca zaman damgalarını güncelleyecek ve içeriklerini olduğu gibi bırakacak; ama teeonları kesecek. Ayrıca, rm+ touch'dan farklı yapmak tee(hardlinks ve
symlinks

Öyleyse neden olmasın truncate -s 0? :-)
Attie

1

Bir günlük dosyasına bir komutun çıktısını yazmak istiyorum, hayal VE stdout'a yazdırın. Aynı anda yapmanız gerektiğinde, o zaman ihtiyacınız var tee.

Bir kullanım örneği, tüm yapıyı stdout'a (örneğin, Jenkins için) yazan komut dosyalarına sahip olmak, ancak aynı zamanda önemli şeyleri ayrı bir günlük dosyasına (özet e-postalar için) yazmaktır.

teeWindows'ta komut dosyası gerektiğinde gerçekten kaybolmaya başlayacaksınız . Yok teeve bu gerçekten can sıkıcı bir durum.


Yaratmak önemsiz değil mi?
Orbit'te Hafiflik Yarışları

Toplu iş / cmd ile mümkün değildir, çünkü bir komut akışını komuttan kolayca bölemezsiniz.
domih

Doğru ama üç satırlı bir C ++ programı gibi ...
Orbit'te Hafiflik Yarışları

1
Windows unxutils dağıtımı, bazı dağıtımların aksine, Windows yürütme ortamınızı kirletmeyen birçok Unix komut satırı aracına sahiptir. En büyük sınırlama, Unix / Linux'ta Windows'tan farklı olarak çalışan "glob" bing'te. "tee" mevcut araçlar arasında.
cmm

2
Aptal olma, o 2018. Powershell kullanın tee. Cmd hiçbir zaman ciddi bir betik yazması için tasarlanmamıştı - VBS bunun içindi. Powershell, yeni bir komut dosyası oluşturma aracıdır. Verilen, Cmd hala oldukça güçlü, ancak komut satırı araçları oldukça az.
Luaan
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.