Komutu saniyeler sonra yürütün (uyku olmadan)


15

Bir komutu uykudan X saniye sonra nasıl çalıştırabilirim. Ya da uyku ile ama kabuk olmadan sadece bu komutun yanıtını bekleyin?

Bunu kullandım ama işe yaramadı

sleep 5 ; ls > a.txt

Arka planda çalıştırmam gerekiyor. ls5 saniye sonra çalıştırmaya çalıştığım bir senaryoda çalıştırmamaya çalışıyorum ve kabuk sadece uykunun sonunu beklemiyor


Neden kabuk olmadan çalışmıyor? Hangi hatayı alıyorsunuz? Tam yoldan mı geçiyorsun? Hangi parçanın ayrıştırıldığını biliyor musunuz ;?
Hennes

bu şekilde kabuk 5 saniye bloke edecek ve sonra komutu çalıştıracaktır., kabuk durmak için buna ihtiyacım yok.
Martin

Sonra ya arka planda bir komut dosyasında ya da bir alt kabukta başlatmanız gerekir.
Hennes

Yanıtlar:


34

Hennes'in önerdiklerini yazmanın daha kısa bir yolu

(sleep 5; echo foo) & 

Alternatif olarak, birkaç saniyeden fazla süreye ihtiyacınız varsa kullanabilirsiniz at. Komut vermenin üç yolu vardır at:

  1. Boru:

    $ echo "ls > a.txt" | at now + 1 min
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  2. Çalıştırmak istediğiniz komutu bir metin dosyasına kaydedin ve ardından şu dosyaya iletin at:

    $ echo "ls > a.txt" > cmd.txt
    $ at now + 1 min < cmd.txt
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  3. atKomutları STDIN'den de iletebilirsiniz :

    $ at now + 1 min
    warning: commands will be executed using /bin/sh
    at> ls
    

    Ardından, kabuktan CtrlDçıkmak için düğmesine basın at. lsKomut bir dakika içinde çalışacaktır.

Biçiminde olduğu gibi çok kesin zamanlar verebilirsiniz [[CC]YY]MMDDhhmm[.ss].

$ at -t 201412182134.12 < script.sh

Bu, senaryoyu script.sh18 Aralık 2014'te 21:34 ve 12 saniyede çalıştıracaktır . Bu nedenle, teoride, atgelecekte beş saniye boyunca bir şey çalıştırmak için kullanabilirsiniz . Bununla birlikte, bu bir sinek uçurmak için bir tank kullanmak gibidir ve Hennes'in önerisi daha iyidir.


Ben $(sleep 5; echo foo) &neden onun önünde bir $ gerektiğini düşündüm emin değilim ile karışıklık tuttu , ama benim sözdizimi yanlış ile ben sadece daha uzun (ve daha anlaşılır) sürümü gönderdi. (command_for_in_new_shell) daha kısadır.
Hennes

@Hennes ve ben çok iyi bir fikrinizi açıkça yırttık. Yaptığım tek şey, daha kısa olması için yeniden biçimlendirmekti, gerçek düşünme bitleri için tüm kredi sizindir :).
terdon

atSaniyede bir gecikmeyle kullanmanın bir yolu var mı ?
Monica'nın Davası

@NicHartley no. İstediğiniz belirli bir zaman (örneğin at 21:43) kullanın veya 4 saniye sonra sleep 4 && commandçalıştırmak gibi basit bir şey yapın command.
terdon

4

Arka planda bir kabuk veya komut dosyası başlatarak bu sorunu çözebilirsiniz.

Misal:

/ bin / sh -c "uyku 5; yankı foo" &
[1] 63791
> Burada aktif kabuk istemi

foo 5 saniye sonra çıktı görünür.
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.