Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [OPGELOST]oud script bijwerken  (gelezen 3029 keer)

Offline flip1000

  • Lid
[OPGELOST]oud script bijwerken
« Gepost op: 2011/03/11, 11:29:34 »
Hallo allemaal,
Ik ben (weer eens) vastgelopen met een oud SysV script voor printers. Het heeft jarenlang goed gewerkt op SCO. Nu met Ubuntu 10.4 werkt het niet helemaal meer.
De bedoeling is om naast de gewone afdruk op de printer, meteen een kopie op te slaan met daaraan vast een (soort) volgnummer.
Zo maakte ik backups voor met name printer foutloop maar ook voor latere referentie. Handig want niet elk rapport kan gemakkelijk opnieuw worden gegenereerd.

Aan het begin van het script heb ik toegevoegd:
#!/bin/sh
Origineel was zonder maar doet dan helemaal niks.
met #!/bin/bash wordt er weliswaar geprint maar werken ook andere opties niet.

De user-applicatie maakt een rapport en stuurt het naar een van de printers met oa deze opdracht:
lp -d<printer> -ol -o10 -o66 -ocp -o/u/spool/<filename>
De locatie bestaat en is toegankelijk, op alle opties behalve de cp wordt goed gereageerd. Ook een nummer, in het voorbeeld 8272, wordt gegenereerd.

Voordat het rapport door de applicatie wordt afgedrukt worden deze meldingen geprint:
cp: cannot create regular file 'noff.8272': Permission denied
chmod: cannot access 'noff.8272' : no such file or directory

Het bestand had natuurlijk als <filename>.8272 naar /u/spool moeten gaan.

Met de lp opdracht gewoon op een prompt wordt het:
cp: cannot create regular file 'finishings=3.11515': Permission denied
chmod: cannot access 'finishings=3.11515' : no such file or directory

Voor het overzicht, het hele script staat in de bijlage. Maar het gaat mis in onderstaand stukje daaruit.

cpfile=0
for i in $5
do
   if [ $cpfile = 1 ]
   then
# alleen de eerste van een evt. list wordt ge'cp'ieerd; alternatief:
# binnen de 'for file'-loop (achteraan) +extra suffix ($copies maal?).
      cpfile=0
      cp $6 $i.$$ 2>&1
      chmod 666 $i.$$ 2>&1
      l -og $i.$$ >>`dirname $i`/log
   else
           case "${i}" in

           nobanner)       nobanner="yes" ;;
      cp|CP)      cpfile=1 ;;
      nob|NOB)   nobanner="yes" ;;
      noff|NOFF)   FF=NO ;;
      lq|LQ)      QUALITY=NLQ ;;
      d|D)      QUALITY=DRAFT ;;
      l|L)      ORIENTATION=LANDSCAPE;;
                5)              PITCH=5 ;;
      10)      PITCH=10 ;;
      12)      PITCH=12 ;;
      15)      PITCH=15 ;;
      17)      PITCH=17 ;;
      33)      LENGTH=33 ;;
      36)      LENGTH=36 ;;
      48)      LENGTH=48 ;;
      66)      LENGTH=66 ;;
      72)      LENGTH=72 ;;
      esac
   fi
done


Ik ben niet zo'n getalenteerd programmeur en heb geen idee of dit gemakkelijk is te herstellen. Voor mij ziet het er super moeilijk uit.
Wie redt mij of zet me op het goede spoor.

Bedankt!
Flip
« Laatst bewerkt op: 2011/04/05, 08:35:35 door flip1000 »

Offline Bloom

  • Lid
Re: oud script bijwerken
« Reactie #1 Gepost op: 2011/03/11, 14:27:58 »
De opdrachtregelopties voor lp zijn niet hetzelfde bij Ubuntu als bij een SCO Unix.
Gebruik man lp in een terminalsessie om de opdrachtregelopties van Ubuntu lp te kennen.
Die van SCO vind je ter vergelijking hier: http://osr600doc.sco.com/en/man/html.C/lp.C.html
Zoals je ziet zijn ze wel makkelijk om te zetten.

Bij het aanmaken van het kopiebestand gebruik je zo te zien een directory /u/spool. Die bestaat niet in Ubuntu. Wel /var/spool, maar dat is alleen beschrijfbaar door de root. Je kunt wel een directory voor jezelf aanmaken, bijvoorbeeld /var/spool/druk waar je wel rechten toe hebt:
sudo mkdir /var/spool/druk
sudo chown user:user /var/spool/druk
sudo chmod 777 /var/spool/druk
Nu kan iedereen aan die directory druk en ook je script kan er nu een bestand in aanmaken.

Offline flip1000

  • Lid
Re: oud script bijwerken
« Reactie #2 Gepost op: 2011/03/22, 12:01:27 »
Dank voor je reactie,
Ik ben er nog steeds mee bezig. De lp opties zijn inderdaad deels anders. Toch lijkt de cp wel te willen werken.
De filename zit echter niet in $6 waardoor de actie stuk loopt, denk ik. Hoe of waar die wel te vinden is, weet ik niet, dat is kennelijk veranderd. Wel wat getest met $5, $7 etc maar ja, blinde mazzel heb ik dan wel nodig...

Het pad /u/spool is inderdaad 'eigen'. Onder /u heb ik de applicatie, database etc staan. Dus het printwerk is ook daar. Alles wel toegankelijk natuurlijk. Als root krijg ik echter dezelfde foutmelding.

Flip
 

Offline flip1000

  • Lid
Re: oud script bijwerken
« Reactie #3 Gepost op: 2011/03/24, 09:39:32 »
Intussen heb ik iets kunnen testen.$6 bevat wel degelijk de filename.
Dus nu wordt de vraag: wat is $i, heeft die een verkeerde inhoud, is die dan ook oorzaak van de -geen toegang- melding?

Flip


Offline flip1000

  • Lid
Re: oud script bijwerken
« Reactie #5 Gepost op: 2011/04/04, 16:28:56 »
Klopt natuurlijk. Ik zei al dat ik er niet erg handig mee ben.

$5 bevat een string met opties, de lus doorloopt die en 'kijkt' wat er na de optie cp staat, en verwacht een padnaam.
Na een hele tijd staren naar (de waarde van) $5 en vergelijken met de oude manier van SCO, begon ik iets te zien...
Linux, of CUPS zet de eigen (vanuit de applicatie) opties vooraan in de string en alfabetiseert. Dat sorteren deed SCO niet en daardoor komt ineens de noff achter cp en staat padnaam vooraan. Dus gaat de opdracht mis.

Dit wetende is er nog geen oplossing. Maar al testend vond ik deze:
In gnome ging ik naar de printer properties van de betreffende printer.
In de job options kun je nog eens eigen opties toevoegen.
Het blijkt dat die NIET mee gesorteerd worden en bovendien vooraan in de string komen.
Hier heb ik de cp nogmaals ingegeven, en ja hoor, we hebben een winnaar. Beter gezegd: genummerde backups van printouts.

Ik kan me nauwelijks voorstellen dat iemand hier nog ooit iets aan heeft. Maar ik wilde toch wel even de oplossing laten zien.

Alleen, hoe moet ik aangeven dat dit onderwerp is opgelost?

Bedankt,
Flip