2 kleine vraagjes over bash

Pagina: 1
Acties:
  • 45 views sinds 30-01-2008

  • DPLuS
  • Registratie: April 2000
  • Niet online
Vaak zie ik bash-scriptjes een punt gebruiken, wat voor een commando is dat eigenlijk?
Zoiets als:

code:
1
2
3
if [ -r blaat ]; then
    . filename
fi


en in dit stukje:

code:
1
dig @rs.internic.net . ns >root.hints.new 2>&1


snap ik niet wat die `2>&1` betekent?

  • Fatal-Error
  • Registratie: Juli 2001
  • Niet online
man bash? Ok, zoeken op een punt is leuk, maar je ziet het snel genoeg staan bij "SHELL BUILTIN COMMANDS". Je kunt ook zoeken op "source", da's hetzelfde.
Ook 2>&1 is te vinden in de manual, zoek bv. op & (de & moet je wel escape'en dmv \, dus 2>\&1 als zoektem intypen (als je bv. less gebruikt om de manual te lezen).

Welcome to the desert of the real.


  • sebas
  • Registratie: April 2000
  • Laatst online: 16-12-2025
Hmm.

code:
1
2
3
if [ -r blaat ]; then
    . filename
fi


If checkt welke exit status -r blaat teruggeeft. Het is eigenlijk niet echt gebruikelijk in die vorm dacht ik, althans niet als -r voor blaat staat. Daarachter is het een parameter voor het commando 'blaat'.

Gaan we even hiervan uit:
if blaat -r; do enz.

blaat -r geeft of een 0 of een 1 als exitstatus terug, 0 is 'deed het' 1 is 'deed het niet, kwam met een error', als de exit status van blaat -r 0 is wordt het deel binnen de loop uiotgevoerd, er wordt dus een programma (filename zal wel een executable of een shellscript zijn) aangeroepen en uitgevoerd. (De punt ervoor betekent volgens mij dat geen subshell gestart wordt, is handig als je in dat shellscript vars uit het 'parent script' wilt kunnen gebruiken.)

code:
1
dig @rs.internic.net . ns >root.hints.new 2>&1


dit voert de uitvoer van het commando dig @rs.internic.net . ns (:?) aan een file root.hints.new. ( '>' maakt de file leeg en schrijft het erin, '>>' hangt het eronder).

Er wordt onderscheid gemaakt tussen standardin (STDIN / 1) en standard error (STDERR / 2). STDIN en STDERR worden normaalgesproken allebei naar je scherm geprint. Errors en warning gaan naar STDERR, gewone messages (print bijvoorbeeld in een shell script) naar STDIN. 2>&1 betekent nu dat 2 naar 1 wordt geschreven, dus in jouw geval komt STDERR ook in dat bestandje te staan.

Dit zal allemaal niet bijster correct zijn, als ik grondleggende dingen mis heb hoor ik het natuurlijk graag. Maar nu heb je tenminste wat betere termen om op te zoeken. Ik kan kan je trouwens learning the bash shell van o'reilly aanraden, handig boekje. Je zult snel merken hoe verrekte handig wat bash kennis is. Bovendien is bash vrij laagdrempelijk en krachtig. Rondom goede zaak om hier wat over te leren dus. :)

Everyone complains of his memory, no one of his judgement.


  • sebas
  • Registratie: April 2000
  • Laatst online: 16-12-2025
<luite|bzy> sebas: volgens mij staat -r blaat voor "test -r blaat"
<luite|bzy> en doe maar eens man test :P
ff gedaan:
NAME
test - check file types and compare values

SYNOPSIS
test EXPRESSION
[ EXPRESSION ]
test OPTION

DESCRIPTION
Exit with the status determined by EXPRESSION.

--help display this help and exit

--version
output version information and exit

EXPRESSION is true or false and sets exit status. It is one of:

( EXPRESSION )
EXPRESSION is true

! EXPRESSION
EXPRESSION is false

[ . . . ]

-r FILE
FILE exists and is readable
* sebas heeft weinig toe te voegen. :)

Everyone complains of his memory, no one of his judgement.


  • DPLuS
  • Registratie: April 2000
  • Niet online
sebas schreef op 06 november 2002 @ 00:42:

(De punt ervoor betekent volgens mij dat geen subshell gestart wordt, is handig als je in dat shellscript vars uit het 'parent script' wilt kunnen gebruiken.)
Aha, dit moest ik dus ff weten, ik wist niet precies waarop ik moest zoeken, want ". --help" gaf dit weer:

code:
1
.: usage: . filename


Dus daar werd ik ook niet wijzer van.
Er wordt onderscheid gemaakt tussen standardin (STDIN / 1) en standard error (STDERR / 2). STDIN en STDERR worden normaalgesproken allebei naar je scherm geprint. Errors en warning gaan naar STDERR, gewone messages (print bijvoorbeeld in een shell script) naar STDIN. 2>&1 betekent nu dat 2 naar 1 wordt geschreven, dus in jouw geval komt STDERR ook in dat bestandje te staan.
En wat is STDOUT dan?
Dit zal allemaal niet bijster correct zijn, als ik grondleggende dingen mis heb hoor ik het natuurlijk graag. Maar nu heb je tenminste wat betere termen om op te zoeken. Ik kan kan je trouwens learning the bash shell van o'reilly aanraden, handig boekje. Je zult snel merken hoe verrekte handig wat bash kennis is. Bovendien is bash vrij laagdrempelijk en krachtig. Rondom goede zaak om hier wat over te leren dus. :)
Klopt, ik zal dat boek eens op zeer korte termijn aanschaffen :)

  • Fatal-Error
  • Registratie: Juli 2001
  • Niet online
DPLuS schreef op 06 november 2002 @ 01:11:
[...]En wat is STDOUT dan?
`man stdout` als eens geprobeerd?

Welcome to the desert of the real.


  • Jordi
  • Registratie: Januari 2000
  • Niet online

Jordi

#1#1

Mja, nu is het wel even genoeg, het wordt steeds meer "zoek nu maar eens" zo :o :)

Het zal wel niet, maar het zou maar wel.

Pagina: 1

Dit topic is gesloten.