Bu kadar basit bir soru gibi görünüyor ama bununla ilgili herhangi bir kaynak bulamıyorum
C / C ++ 'da, okunan değeri komut isteminden bir değerde saklamak ve bir değişken içinde saklamak anlamına gelir,
Kabuk Programlama hakkında nasıl?
Bu kadar basit bir soru gibi görünüyor ama bununla ilgili herhangi bir kaynak bulamıyorum
C / C ++ 'da, okunan değeri komut isteminden bir değerde saklamak ve bir değişken içinde saklamak anlamına gelir,
Kabuk Programlama hakkında nasıl?
>>
, bir metin dosyasına çıktı vermek için kullanılabilir ve bu dosyadaki mevcut herhangi bir metne eklenir.
'herhangi bir komut' >>
textfile.txt
'herhangi bir komut' çıktısını metin dosyasına ekler.
>
değerini kullanarak üzerine yazacak.
Çıkışı bir disk dosyasına yönlendirmek için sağ köşeli parantez simgesi (& gt;) kullanılır. Belirtilen dosya zaten mevcut değilse, oluşturulur; Varsa, üzerine yazılır. Sol açılı ayraç sembolü (& lt;) girişi bir disk dosyasından yönlendirmek için kullanılır. Var olan bir dosyaya çıktı eklemek için çift dik açılı ayraç kullanın (& gt; & gt;)
>
ve >>
, FD'ler için (Dosya Tanımlayıcıları) yönlendirme işleçleridir
Bash'ta standart standart girdi (strin), standart çıktı (strout) ve standart hata (strerr) olan FD standartlarına sahipsiniz. Bunlar sırasıyla FD 0, FD 1 ve FD 2 tarafından da çağrılabilir.
Normalde tüm FD'lerin terminale işaretini yaparsınız, ancak bu yeniden yönlendirme kullanılarak değiştirilebilir.
Örneğin, eğer ararsanız:
command > log.txt
Çıktıyı log.txt dosyasına yönlendireceksiniz Bu çağrıya benzer:
command 1> log.txt
Bu işlem yalnızca yönlendirmeyi yeniden yönlendirdiğinden, hala terminaldeki hatayı görebileceksiniz. Strerr dosyasını log.txt dosyasına yönlendirmek için şunları yapmanız gerekir:
command 2> log.txt
Yine, bu sadece strerr'i yeniden yönlendirir. Hem stdout hem de stderr'i yeniden yönlendirmek isterseniz, stderr çıktınızı >&
komutunu kullanarak stdout'a kopyalamanız gerekir.
command 1> log.txt 2>&1
Bu komutu anlamak için sağdan sola formu okumanız gerekir, ilk olarak stdrr dosyasının bir kopyası stdout'a yapılır, sonra da logut dosyası dosyasına yönlendirme yapılır.
Yönlendirme yöntemini bu şekilde kullandığınızda, bash dosyanın var olup olmadığına bakmaz ve mevcut olanı silme anlamına gelirse bağımsız olarak bir tane oluşturmaz. Eğer log dosyanızda daha önce yazılanları kaybetmekten kaçınmak istiyorsanız, yukarıda açıklanan aynı yollarla >>
komutunu kullanabilirsiniz, ancak bu durumda tüm çıktılar varolan dosyalara eklenebilir.
C ++ 'da cin, cout ve cerr ile kullandıkları için karım, benden daha iyi bir cevap verdi.
Bunlarda uzman değilim, bu yüzden bazı şeyleri yanlış yapmış olabilirim. Daha eksiksiz bilgi için Greg's Wiki'deki Bash rehberini okumanızı tavsiye ederim
C / C ++ 'da Sol ve Sağ Kaydırmalı işleçler , <<
ve >>
sembollerini bitly operatörü olarak kullanır; bitlerde vardiya işlemlerini gerçekleştirir. C ++, aynı zamanda, temel Giriş / Çıkış işlemlerinde aşırı yüklenmiş bit çarpması operatörlerinin kullanılmasını sağlar; C ++'daki >>
ve <<
köşeli parantezler, standart giriş / çıkış olabilecek akışlar için ayıklama ve ekleme için kullanılır. , dosyalar.
Kabuk Betiği / Programlamada, yukarıda belirtildiği gibi ayıklama / ekleme işlemlerinden çok farklı değil, >>
/ <<
( >
/% co_de varyantı) operatörler) , standart akışları kullanıcıları tarafından tanımlananlara yönlendirmek ve ekleyerek gerçekleştirmek için kullanılır ( (üst üste binen
işlemleri . <
/ >
değerinden farklıdır)
<
ve Cout ve cin için kullanılan <<
? Kabuk betiğinde, >
işleci, doğrudan doğruya yerleştireceğiniz bir dosya oluşturacak ve eğer varsa, dosyanın tüm içeriğini silecektir.
ancak >>
, metni ona uygun dosyaya ekleyecektir
tercih edilen >>
, günlük dosyasına yazılır. Zaman, sayım veya bazı işlem günlüklerini eklemek istediğiniz gibi
ve yeni dosya oluşturmak için >
şunu deneyin:
#!/bin/bash
nowt=$(date +"%T")
date1=$(date +"%s")
NOW=$(date +"%d-%m-%Y")
now=$NOW" "$nowt
file_name=$NOW"_"$nowt".log"
echo "START TIME WAS :$now " | cat > /home/user/Desktop/$file_name
sh some_sh_file you want to run 2>&1 | tee >> /home/user/Desktop/$file_name #want to log the out put
nowt=$(date +"%T")
date2=$(date +"%s")
NOW=$(date +"%d-%m-%Y")
now=$NOW" "$NOW
diff=$(($date2-$date1))
echo "$(($diff / 60)) minutes and $(($diff % 60)) seconds elapsed."
echo "END TIME WAS :$now" | cat >> /home/user/Desktop/$file_name
echo "$(($diff / 60)) minutes and $(($diff % 60)) seconds elapsed." | cat >> /home/user/Desktop/$file_name
Etiketlerdeki diğer soruları oku command-line bash scripts