![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här. |
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| Skriv Fel med uppsättning kommandot | Shribigb | Shell-programmering och Skript | 0 | 03-06-2009 06:08 |
| tar fel avfart fördröjd form vattenförande fel | chayato | Linux | 1 | 02-06-2009 12:07 |
| I ksh skalkommando - Print "ABC" ger fel | sagarjani | Shell-programmering och Skript | 2 | 10-08-2008 05:32 |
| Anpassad fel sida när hankatt autentisering misslyckas | sebagra | UNIX och Linux Applications | 0 | 05-06-2008 06:10 |
| på kommando misslyckas | a329743 | UNIX för avancerade & Expertanvändare | 1 | 10-05-2006 11:08 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
Hur skriva ut fel och exit om kommandot misslyckas?
Killar några tips om att skriva ut ett felmeddelande till stderr och uppsägning bör ett kommando misslyckas inom ett ksh script? Jag försöker null vissa utdatafiler. Touch lämpar sig inte som jag behöver null dem. print ""> är inte lämplig som jag behöver för att kontrollera elsehere för om de är 0bytes eller inte. Jag har provat dessa nedan exempel och inget att fungera korrekt. Jag vill inte att få en kontroll efter varje kommando som: -- Kod:
if [[ $? -ne 0 ]];then print "error blah blah" >&2 exit 2 fi Nedan tester fungerar inte korrekt. Jag gissar att leka något. Kod:
OUTFILE=/tmp/out
# Null outfiles. Security already checked
> ${OUTFILE} || print "ERROR: blah blah \n" >&2 ; exit 2 #doesnt work
> ${OUTFILE} || (print "ERROR: blah blah \n" >&2 ; exit 2 ) #doesn't work
> ${OUTFILE} || (print "ERROR: blah blah \n" >&2 && exit 2) #doesnt work
if [[ -n "$(> ${OUTFILE} 2>&1)" ]];then
print "ERROR: blah blah \n" >&2
exit 2
fi # doesnt work
Alla idéer eller alternativ? |
|
||||
|
Särskilt om rapportering och spännande, det här är ett något mer komprimerat idiom: Kod:
test $condition || { print "Crap blew up; exiting"; exit 2; }
Du kan också direkt test på grund av ditt kommando: Kod:
command || { print "Crap blew up; exiting"; exit 2; }
Jag tycker om att läsa det högt för mig själv som "antingen du gör det eller dö!", Som om threathening skriptet. Senast redigerad av EagleFlyFree; 04-23-2009 vid 03:17.. |
|
||||
|
Tack dude thats arbetat som smort. Verkar jag var nästan där, men inte använda den korrekta () Kan ni förklara skillnaden mellan () och () på kommandoraden grupp? Även i notied det, i slutet innan) är mycket viktigt annars nästa kommando fungerar inte. t.ex. Kod:
This works and exits if cant null but echos got to here if can.
> ${OUTFILE} || { print "ERROR: cannot null output file. Exiting\n" >&2; exit 2; }
> ${TMPFILE} || { print "ERROR: cannot null tmp file. Exiting\n" >&2; exit 2; }
echo "got to here"
This doesnt work and never gets to echo even if null is successful
> ${OUTFILE} || { print "ERROR: cannot null output file. Exiting\n" >&2; exit 2 }
> ${TMPFILE} || { print "ERROR: cannot null tmp file. Exiting\n" >&2; exit 2 }
echo "got to here"
|
|
||||
|
() Utför uppgifter i en ny subshell, med separat stat. () Utför saker i det aktuella skalet. Exempel: Kod:
(aVariable="hello"); echo $aVariable detta inte print "hej", eftersom det var som i ett nytt skal, vars förkastades då () uttryck upphört. Tänk på variabel omfattning i C; variabler leva och dö inne i block där de är deklarerade. Kod:
{aVariable="hello"; }; echo $aVariable
detta skrivs ut "hej", eftersom det var som i samma skal som nästa uttalande. Det är samma skillnad som: Kod:
sh myScript.sh och Kod:
source myScript.sh Dessutom, ja, du behöver ett semikolon för att avsluta den senast inom (); det är ju så tankskalets grammatik definieras. Slag på hur du kan antingen göra detta: Kod:
if $condition; then $statements; fi eller den här, med hjälp newlines stället för semikolon för att separera syntax delar: Kod:
if $condition
then
$statements
fi
Enligt de bash människans sida, det är olika från () eftersom (och) är reserverade ord i stället för metatecken, vilket betyder att de inte automatiskt leda ordet raster. Förmodligen gäller samma sak i resten av skal. Senast redigerad av EagleFlyFree; 04-23-2009 vid 03:14.. |
|
||||
|
Nämner inte det, jag älskar yapping om bash.
Dess manualsidan är lång och skrämmande, men bläddra igenom det då och då, du är skyldig att lära sig mycket godbitar varje gång. De delar om historia och Readline är särskilt coolt, och de är smidiga och roliga att använda. |