at parancs

Fórumok

Sziasztok!

Szeretnék időzítve lefuttatni egy parancsot

$echo "hello" | at 12:09

 

warning  commands will be executed using  /bin/sh

 

Nincsen a /bin -en belül  sh könyvtár nekem. Ráadásul nem scriptet akarok futtani hanem csak egy echo parancsot!

Hozzászólások

Szerkesztve: 2022. 03. 03., cs – 12:26

Bah.

Eszed vagy nem eszed, az "at" a lefuttatandó parancsot mindenképpen egy shellben fogja lefuttatni, de ez így is van jól.

A /bin/sh manapság általában egy symlink szokott lenni a rendszerben lévő alapértelmezett shellre. (bash, vagy amit éppen használsz)

Szerkesztve: 2022. 03. 03., cs – 12:33

a /bin/sh egy shell.

az echo egy built-in command, tehát *függ attól melyik shell-t használod.

 

*persze az 'echo' várhatóan mindegyik shell-ben benne van, szóval neked kb mindegy.

De ha mégsem mindegy, akkor az at parancsnak megadhatod, hogy melyik shell-t használja.

A /bin/sh  csak a default.

"Nincsen a /bin -en belül  sh könyvtár nekem. "

És?

Kereste bárki is (úgy értem, rajtad kívül)?

:(

"Normális ember már nem kommentel sehol." (c) Poli

Szerkesztve: 2022. 03. 03., cs – 12:31

Az "sh" a /bin könyvtárban levő fájl, nem pedig egy újabb könyvtár. Ez nem windows, ahol a futtatható programoknak .exe kiterjesztés kell a név végére.

Mellesleg a /bin-ben binárisok (futtatható programok) szoktak lenni. Azaz a /bin/sh is egy futtatható program. Egész pontosan egy SHELL, ami parancsértelmező. Az echo parancsot az "sh" nevű SHELL programban megvalósított programkód fogja végrehajtani. Pedig lehetne a /bin -en belül létező különálló "echo" nevű program is. A warning erre a lehetséges 2 eltérő viselkedésre figyelmeztet.

Aztán majd a linux guruk kijavítanak ha baromságot írtam.

Öö..de hiszen ez csak annyit mond, hogy melyik shellt fogja használni a parancs futtatásakor..Ami hasznos olyankor, ha olyasmit futtatnál, amit mondjuk a bash/zsh/egyéb tud értelmezni, a sima sh meg nem.

Szerkesztve: 2022. 03. 03., cs – 14:43

-

Akkor hogyan kell kiadni a parancsot hogy lefusson?

 

Ez így hülyeség:

echo `echo "hello"` | at 12:09

echo "commant_to_run" | at 12:09

mert az at-nek pipe-olod a parancsot. az egy más kérdés, hogyha echo "echo hello" | at 12:09 -et írsz, akkor az lefut, de a háttérben, és a usernek mailt küld

4 és fél éve csak vim-et használok. elsősorban azért, mert még nem jöttem rá, hogy kell kilépni belőle.

Szerkesztve: 2022. 03. 03., cs – 14:43

-

Egyszerűen le lehetne ellenőrizni hogy lefut e a háttérben ha fájlt hozatunk vele létre.

De hogy kell kiadni a parancsot?

 

touch aaa | at 12:12  

Így hülyeség mert létrehozza  az at előtt is a fájlt

A pipe az egy olyan entitás, amin az őt megelőző program stdout csatornájára ömlő karakterek továbbhaladnak a következő program stdin csatornája felé.

Itt meg ilyen nincs, tehát marhaság+marhaság=marhaság. :-D

Az alábbi sor választ adhat néhány kérdésedre:

echo /bin/bash -c 'touch aaa' |at now+2 minute
  • Az echo a stdout-ra írja a parancsot - amit az at majd végrehajt.
  • A /bin/bash -c más shell alatt fogja futtatni a -c utáni parancsot.
  • Nem történt intézkedés az időzített program esetleges kimenetéről (stdout) és
  • a hiba kimenetéről (stderr) - ezért erről levelet fogsz kapni.
  • Amiről nem intézkedtünk az a futtatás pontos helye.

Ezért most külön büntetést nem szabok ki, de amit az előbb írtál, az az alábbi hibát eredményezi:

$ echo /bin/bash -c 'touch aaa' |at now+2 minute
$ cat /var/spool/mail/teve
...
Subject: Output from your job       15
...

touch: missing file operand
Try 'touch --help' for more information.

Ahogy írták felettem a /bin/sh minden rendszeren létezik. Linuxon jellemzően egy symlink a default rendszershellre, ami lehet akármilyen POSIX kompatibilis shell, Bash, zsh, dash, vagy amit akarsz. Elvi síkon még nem POSIX kompatibilis is lehet, pl. fish, nushell, stb., de olyat szopás /bin/sh-ra rádrótozni, egy csomó minden nem fog működni.

Sőt, a helyzetet bonyolítja, hogy egyszerre többféle shellt is használhatsz a rendszeren. Pl. symlinkkel beállíthatod, hogy a /bin/sh a dash-ra mutasson, míg a felhasználód alap shelljévé a Bash-t teszed meg (interaktív shell), de a scriptekben #!/bin/zsh segítségével vagy csak egyszerűen terminálban zsh parancsot kiadva futtathatsz dolgokat külön zsh-ban. A legtöbb disztrón viszont a beállított default mindenféle shellre a Bash, ritkábban zsh.

Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”