bash'de geçerli çalışan komuttan sonra komut nasıl çalıştırılır?


19

Wget ile dosya indiriyorum ve indirme bittikten sonra bilgisayarımı kapatmak istiyorum, ama şimdi bir yere gitmem gerekiyor :) İşlem tam olarak ne zaman bash'de komut yürütmek mümkün mü?

Bunun işe yaradığını biliyorum:

wget http://example.com/dosya.rar; şimdi kapat

Peki ya ben sadece yazarsam:

wget http://example.com/dosya.rar

2
&& ve || kullanmayı düşünün onun yerine ;. && ve || sonraki komutu yürütmeden önce önceki komutun dönüş değerini kontrol edin ... wget başarısız olursa, kapatmak istemeyebilirsiniz.
KFro

Yanıtlar:


31

Bunun gibi bir şey yapabilirsiniz:

  1. ctrl-z ile wget yürütülmesini durdurun (durdurulmaz, askıya alınır)
  2. arka plana koy (bg)
  3. run: bekleyin; kapanma -h şimdi

bekleyin tüm programlar için geçerli kabuk arka planda koştu bekleyecek - yani bu wget.

Bekleme bittikten sonra - kapanma devam eder.


bittiğinde wget örneğinizi ön plana almayı (fg) unutmayın. Wget zaten çalışıyorsa, ^ z (control-z) ile ön plana koyabilirsiniz.
Andrew Scagnelli

4
İlerleme çubuğunu gerçekten görmek istemediğiniz sürece gerek yok.
dmckee

Makineyi kendine bırakıp kapattığı için gerek yok.
Kurt

11

Başka bir kabukta şunu kullanın:

ps -u <your username> | grep wget

beklemek istediğiniz komutun PID'sini bulmak için

wait <PID>; shutdown -h now

böylece işlem sonlanıncaya kadar kapatma çalışmaz. Ayrıca bkz . Depesz'in cevabı .


+1, sadece bir not: waitsadece aynı kabuktan başlayan komutlar için çalışır
Chriki

5

Çözümlerim şudur: Control + Z ile uzun süren görevinizi askıya alın, ardından şöyle bir şey yazın:

fg; echo "Done!"

Komutunuzun başarısına veya başarısızlığına bağlı olarak farklı bir şekilde tepki vermek istiyorsanız, && ve || kısa devre operatörleri olarak.

fg && echo "Success!" || echo "Failure!"

EDIT: Bu sudo ile çalışmaz, çünkü şifrenizi isteyecektir. Buna göre, örnekleri sudo kullanarak sildim. İkinci görev için sudo'ya ihtiyacınız varsa, burada yayınlanan yöntemlerden birini kullanın.

Öte yandan, hem GNOME hem de KDE'nin uygun bir D-Bus sinyali ya da bir şey göndererek sudo kullanmadan bir kapatma / yeniden başlatma tetikleme yolları sunduğuna inanıyorum.


+1 için fg..., ancak sudobir şifre girmeniz istenirse bir sorun olabilir
mark4o

Hmm. Evet, bir şey bittiğinde bu numarayı sudo yapmak için kullanmadım. Sudo için farklı bir numaraya ihtiyacınız olacak. Yazımı buna göre düzenleyeceğim.
Ryan

Benim amacım için bu cevap, süreci otomatik olarak ön plana çıkardığından daha üstündür
Cookie

Ayrıca, sudo şifreleri devre dışı bırakılabilir (kullanıcı başına ve komut başına) - kullanıcının sudo üzerinden bunu bir kez kapatmasına izin verilirse, bunu her zaman yapmasına izin verilebilir. Düşmanca bir kapatma bazı durumlarda o kadar tehlikeli olmayabilir - çalışan bir makinede güvenliği ihlal edilmiş konuk erişimi kadar tehlikeli olmayabilir.
Çerez

1

Evet, sadece ikinci komutunuzu yazın ve enter tuşuna basın. Geçerli programınız metni kaydırıyorsa, neleri doğru yazdığınızı göremezsiniz, bu yüzden doğru yapmak için anahtarlarınızı izleyin.

Daha akıllı bir yol, başka bir TTY'ye (CTRL + ALT + F1 ila F6) geçmek ve komutu aynı anda çalıştırmaktır veya ekran gibi bir komut satırı programı kullanıyorsanız, içinde yeni bir pencere oluşturabilirsiniz.


İlk seçenek için +1. Korkarım ikinci seçeneğin nasıl çalışması gerektiğini anlamıyorum.
innaM

Örneğin CTRL + ALT + F2 tuşlarına bastığınızda, oturum açıp komut yazabileceğiniz yeni bir ikinci konsola geçilir, böylece orada ikinci bir komut çalıştırabilirsiniz. İkincisi, ekranı indirirseniz (konsolunuzu daha süslü bir şekilde kullanmak için bir program), tekrar giriş yapmak zorunda kalmadan tekrar komut yazabileceğiniz ikinci bir sekme / pencere açabilirsiniz. Ama aynı anda ihtiyacınız olduğu için, seçenek 1 ile kalabilirsiniz, aynı etkiyi elde etmenin başka bir yolu olduğunu sanmıyorum. İşlemin hala çalışıp çalışmadığını kontrol etmek için başka bir TTY / pencere kullanmadığınız sürece. :-P
Tamara Wijsman

DMckee'nin cevabından bekleme PID'sini kullanın
Cookie

1

Süslü olmak istiyorsanız, wget'in dönüş durumunu kontrol edin ve sadece başarılı olursa kapatın.

% wget http://example.com/file.rar
% if [ $? -eq 0 ]
> then
> shutdown now
> fi

2
Bu, komut dosyası oluştururken iyi bir yaklaşımdır, ancak çalışma sırasında wgettesti oluşturmak için bir istem almazsınız.
dmckee

Bunu kontrol etmek için bunu Control-Z ve fg numaramla birleştirebilirsiniz.
Ryan
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.