Jag har ett script mot ett webhotell (one.com) som slutat fungera utan jag ändrat i scriptet. Det jag vill göra som ett 1:a steg är att ta bort alla hängande processer med nått som:
Varje gång du skriver "ps -ax" så får du ett felmeddelande. Din ps tar inte sådana argument, prova "man ps" och gör rätt. (Antagligen "ps ax".)
xargs är världens grej annars om du vill köra ett kommando med parametrar från en pipe: "... | xargs kill -9". I min "man kill" (Linux) står det ingenstans att kill tar processid från stdin. Vilket OS?
Tja jag är uppväxt med Berkley unix 4.2. Där var det ps -ax. Jag vet att det är fel men det sitter i ryggmägren, och fungerar fortfarande dock med lite gnäll från OSet
Precis, så antingen använder du xargs som jag beskrev ovan, eller så gör du något shelligt, typ stoppar in din pipe i backticks som arg till kill, eller använd $(...), lite beroende på shell och smak. Finns säkert fler sätt.
kanske inte så vackert med det fungerar. Men framför allt jag har förstått att de inte alltid fungerar att ge argument via pipe.
Och till ytter mera visso; Jag har en annan pipe där jag försökte döpa om massa filer till något annat. Filerna ser ut som;
CD-1/song1
CD-1/song2
CD-1/song3
etc
Nu kanske jag kan få det att fungera!
Jag bugar och tackar för nyvunnen kunskap. Tack!!
Ps
jag får återkomma med mitt skumma problem med webhotell och ftp
Men framför allt jag har förstått att de inte alltid fungerar att ge argument via pipe.
Tekniskt sett fungerar det aldrig att ge argument via pipe.
Pipes skickar data till stdin hos mottagaren, inte via argument.
Det är just det som xargs är bra för, det "konverterar" från stdin till kommandoargument.
Du verkar använda ftp en del i skript. Jag rekommenderar att du kikar på lftp som klarar betydligt mer trick och fungerar bättre för automatiska grejor.
Själv använder jag killall när jag ska döda flera processer.
killall vill man dock INTE använda på en riktig UNIX, för då får man vad man ber om.
..Klassiker när nån linuxmänniska sätter sej vid tex en solarismaskin..
Det gör också att jag aldrig använder killall eftersom det är för lätt att göra fel, precis som att jag av princip undviker fördummande alias.
("alias rm = 'rm -i'" är ett typexempel.)
På de flesta "riktiga" UNIX'ar (SysV) så gör killall som det låter, dödar ALLA processer, om man då är root så tar man ner systemet lite osnyggt, är man vanlig user så dödas allt man startat inklusive ens loginskal. vanligen är det inte vad man ville oavsett.
På linux/BSD fungerar det inte så utan killall är en form av kill fast den tar processnamn istället för pid.
Kör man då blandade system så är det en dålig vana att använda killall då det bara är en tidsfråga innan man gör fel.
Man kan då köra pkill, men vanligen föredrar jag att hitta pid och skicka signaler till den istället.