Linux ve Diğer İşletim Sistemleri
Terminalde For Döngüsü Ve Sublime Text İ Script Olarak Çalıştırma[Linux]
Terminalde For Döngüsü Ve Sublime Text İ Script Olarak Çalıştırma[Linux]
-
Bu terminalde for döngüsü yapamıyorum zaten ne yazsam çat diye işliyo arkasını bulamıyorum şimdi ilk sorum şu, sublime text te kodlarımı düzgünce yazıyorum, ben bu dosyanın tamamını terminalde nasıl run edebilirim, bu sublime ı masaüstüne kaydedip terminalde bu text dosyasını çalıştırmayı denedim ancak yine de yapamadım(call, run, open gibi şeyler denedim) hangi komutu kullanayım?
Diğer sorumsa şu, şimdi ben kodlarımı yazdım, masaüstündeki sample klasörün içine ben örneğimi mesela sampleR1 diye koyuyorum ve kodları çalıştırdığım an çok güzel bir şekilde bana sonuçlarını verip hemen yanına finalresult dosyası atıyor, ancak ben bunu durmadan yapmasını istiyorum, yani mesela sample klasörünün içindeki bütün dosyaları tek tek çalıştırmasını ve her biri için ayrı ayrı sonuç vermesini istiyorum. R da felan for döngüsü yaratmak kolay oluyodu ama burda her bişeyini benim belirlemem gerektiği için beceremedim.
en azından ubuntuda for döngüleri için bir link verebilirmisiniz
-
Bknz: Bash Scripting
https://stackoverflow.com/questions/1521462/looping-through-the-content-of-a-file-in-bash
0x656e tarafından 09/Ağu/17 10:50 tarihinde düzenlenmiştir
https://stackoverflow.com/questions/10523415/bash-script-to-execute-command-on-all-files-in-a-directory -
Hocam istersen kodalrını paylaş müsait olursam bi bakayım
-
Hocam o komutların olduğu dosyayı. .sh uzxantılı olarak kaydet ve aynı şekilde editlemeye devam et.
dosyaya:#!/bin/bash
STRING="Hello World"
echo $STRING
yaz ve kaydet. daha sonra terminalde o dosyanın klasörüne git cd ile. bash filename.sh veya sh filename.sh Tşeklinde çalıştır.
Ekranda hello world gördüysen, dosyanın içeriğini şununla değiştir:#!/bin/bash
for VARIABLE in 1 2 3 4 5
do
echo "Hello World"
sleep 9
done
ve dosyayı kaydet ve sh filename.sh veya bash filename.sh Tşeklinde çalıştır. Konsola 5 kez hello world yazar bu loop. ayrıca her yazı işleminden sonra 9 saniye bekler.
işte sen echo yerine ne yaptırmak istiyorsan yazarsın. istersen sleep 9u silersin her şeyi birden yapar -
Cron job
https://www.zulfumehmet.com/linux-sistemlerde-cron/
Bu makaleyi incele. Görev oluştur 1 dakkada bir istediğin dosyayı çalıştırsın yada daha ez bir sürede.
-
İkinci soruna gelirsek: Şimdi diyelim ki senin linux (ownerı: k) masaustunde "ornek" adında bir klasörün var. İçinde de "c.txt" ve "k.txt" adında iki text dosyası var. Bu dosyaların içinde de komutlar var
(alt alta dizili ve son line boş bırakılacak*)
Şunun gibi:
--------------------------------
/home/k/Desktop/ornek/c.txt
--------------------------------
echo Hello
sleep 9
echo World
sleep 9
ls /home/k/Desktop
sleep 9
--------------------------------
/home/k/Desktop/ornek/k.txt
--------------------------------
echo 0
sleep 9
echo 9
sleep 9
--------------------------------
Şimdi senin amacın bir .sh dosyası kullanarak bu klasordeki bu dosyaların içindeki komutları çalıştırmak.
Sen bir tane .sh dosyası oluştur. içine şu kodu yaz:#!/bin/bash
for file in /home/k/Desktop/ornek/*
do
filename="$file"
while read c; do
echo $c ":"
eval $c
done < $filename
done
---------------------------------------
Bu kodu o .sh dosyana yazdıktan sonra dosyayı masaüstüne deneme.sh olarak kaydet. Daha sonra bir terminal açıp
sh /home/k/Desktop/deneme.sh veya bash /home/k/Desktop/deneme.sh Tolarak çalıştır.
Ben bunu yazdım ve test ettim zaten sana da test edilmiş şekliyle gönderiyorum sen gerekli yerleri kendine göre değiştir.
sen o komutu verdiğinde önce örnek klasöründeki tüm dosyalar için bir loop başlıyor. klasördeki her bir dosyanın sırayla her bir lineı okunuyor, line ekrana yazılıyor ve çalıştırılıyor. eval olduğu için sonucu da direk ekranda görürsün zaten.
c.txt ve k.txt içindeki komutlara sleep ekledim çünkü çok hızlı olmasın sonucu gör istedim.
Kolay gelsin -
Buna ek olarak, klasördeki her bir dosya hangi sırayla açılacak onu bilemem, ls -v ile falan çözebilirsin istersen onu da ekleriz
* ile belirttiğim açıklama:
C standardına göre: text dosyaları boş bir satırla bitmeli, aksi halde son satırın doğru okunup okunmayacağı muammaThe C standard says that text files must end with a newline or the data after the last newline may not be read properly.
ISO/IEC 9899:2011 §7.21.2 StreamsA text stream is an ordered sequence of characters composed into lines, each line consisting of zero or more characters plus a terminating new-line character. Whether the last line requires a terminating new-line character is implementation-defined. Characters may have to be added, altered, or deleted on input and output to conform to differing conventions for representing text in the host environment. Thus, there need not be a one-to- one correspondence between the characters in a stream and those in the external representation. Data read in from a text stream will necessarily compare equal to the data that were earlier written out to that stream only if: the data consist only of printing characters and the control characters horizontal tab and new-line; no new-line character is immediately preceded by space characters; and the last character is a new-line character. Whether space characters that are written out immediately before a new-line character appear when read in is implementation-defined.
-
Hocam bir de bunu elle çalıştırdık ya eğer belli zamanda çalışsın istersen sudo crontab -e ile crontabi açarsın. INSERT moduna geçersin. yeni bir satır oluşturup oraya alttakini eklersin sonra kaydedip çıkarsın
15 16 * * * /usr/bin/sh /home/k/Desktop/deneme.sh
her gün 16:15'te masaüstündeki dosyanın çalışması laızm outputunu da istersen alttaki kodla değiştir
15 16 * * * /usr/bin/sh /home/k/Desktop/deneme.sh >> /home/k/Desktop/cronLogForDenemeSH.txt 2>&1
-
"sublime text te kodlarımı düzgünce yazıyorum" hocam simdi benim anlamadigim, sen kodlarini hangi dilde yaziyorsun?
Derleniyor mu yoksa yorumlaniyor mu?
-
cok teşekkür ederim herkese süpermen dolu forum :D sublime text tamamdır
for döngüsü için biraz daha çalışmam gerek sanırım çünkü bir türlü yapamıyorum kodları soran arkadaşlar için örnek olarak iki komutu göstereyim bundan birsürü var ve her yeni komut bir önceki dosyanın çıktısını alıp işleyip yeni bir dosya veriyor böyle 5 6 kadar daha komut var ve eklenecek.samtools sort -0 (işlemden çıkmış dosya-x) (işlemegirecek dosya-x) samtools mpileup -f (işlemden çıkmışdosya-x) (işlemden çıkmışdosya-y)
daha anlaşılır şekliyle şöyle
samtools sort -0 (/home/erebos/desktop/sample/y.bam) (/home/erebos/desktop/sample/x.bam) samtools mpileup -f (/home/erebos/desktop/sample/y.bam) (/home/erebos/desktop/sample/z.bcf)
istediğim for döngüsü ise bu işleme girecek dosya x masaüstünde bir klasördeki bir dosya, ama ben bunu masaüstündeki o klasörün içindeki bütün dosyalara tek tek yapmasını istiyorum, sıkıntımsa şu, ortaya çıkacak dosyanın adını da ben belirliyorum def olarak belirlenmiyor, o yüzden komutu tekrar ettiğinde bir önceki sample ın çıktısını alıp tekrar işliyor.
-
şuan daha büyük bir sıkımtım var, youtube da videoyu tam ekran yapıyorum ve geri çıkarken alt-tab ya da direk sağ alttan tıklayarak fark etmiyor, kitlenip kalıyo bilgisayar, tweak tool vardı ayarlarıyla oynamıştım kaldırdım fayda etmedi