Sponsored Content
Top Forums Shell Programming and Scripting Variables containing spaces in lpadmin Post 302314238 by HalfNube on Thursday 7th of May 2009 07:33:02 PM
Old 05-07-2009
Data Variables containing spaces in lpadmin

I apologize for the long post. I have a lot of info...

I am trying to write a script that will add a network printer (or several) to a system using information read in from a text file. My problem is the spaces in the PPD file name, I'm not sure how to put the file name in or how to read it back so the spaces are read properly.

So, If I type this command:

lpadmin -p MyOfficePrinter -E -v lpd://my.server.ca/Office -P /Library/Printers/PPDs/Contents/Resources/en.lproj/HP\ LaserJet\ 4000\ Series.gz

It works fine. But of course I might want to name the printer something else, or use a different queue, or change the printer type.
My first attempt at using variables was:

PrintName="MyOfficePrinter"
PrinterQ="lpd://my.server.ca/Office"
PPDfile="/Library/Printers/PPDs/Contents/Resources/en.lproj/HP\ LaserJet\ 4000\ Series.gz"
lpadmin -p $PrinterName -E -v $PrinterQ -P $PPDfile

This would install the printer as a local printer and give an error:
lpadmin: add-printer (set model) faild: client-error-not-found

After running 'set -x' I was able to see that bash was expanding the command to:
+ lpadmin -p MyOfficePrinter -E -v lpd://my.server.ca/Office -P 'Library/Printers/PPDs/Contents/Resources/en.lproj/HP\' 'LaserJet\' '4000\' Series.gz

After this I tried a whole bunch of test variables and found (of course) that having backslash's in the variable was messing me up.

I tried a few different ways of putting this command together and the closest I got was:

PrintName="MyOfficePrinter"
PrinterQ="lpd://my.server.ca/Office"
PPDfile="/Library/Printers/PPDs/Contents/Resources/en.lproj/HP LaserJet 4000 Series.gz"
lpadmin -p $PrinterName -E -v $PrinterQ -P "$PPDfile"

Which expands to:

lpadmin -p MyOfficePrinter -E -v lpd://my.server.ca/Office -P '/Library/Printers/PPDs/Contents/Resources/en.lproj/HP\ LaserJet\ 4000\ Series.gz'

Which runs, does not generate an error, and the printer shows up in my printer list in System Preferences. But it does not print and does not have anything listed in it's installable options. So it partially installed the printer.

Other than going through my en.lproj folder and removing the spaces from all the file names, I can't think of anything else to do to make this work.

Can anyone out there help????
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

removing spaces from variables?

I stored results like this VAR=`wc -l < ls.txt` But the value of the wc gave me a padded number. How do I strip the padding from $VAR? Do you think I could use SED? Except instead of a file input, have a variable redirection input? (2 Replies)
Discussion started by: yongho
2 Replies

2. Shell Programming and Scripting

Read variables contain spaces from text file

Dears, I developed a shell script to read varibales from text file as the following: cat /dev/null > /rename-OUT.txt while read line do set -- `echo $line` snmpset -c dslmibs $1 sysName.0 octetstring $2 after=$(snmpget -c dslmibs $1 sysName.0 | cut -d: -f3) echo "$1,$2,$after" >>... (1 Reply)
Discussion started by: ahmed.zaher
1 Replies

3. Shell Programming and Scripting

bash - add backslash in front of variables w/ spaces

Hello, Im writing a script that works by recursively going into directories with find. But I have some directories that have spaces in them.. so I need to parse the variables to add a backslash before the spaces. Im not exactly sure how how to do this in bash, and honestly I dont think I know... (3 Replies)
Discussion started by: trey85stang
3 Replies

4. Shell Programming and Scripting

Spaces in Lines for Variables

All, I am driving myself crazy over this one. I have run a find command against a volume on a nas. That returns a full listing of path and file name. This is an example of one line of output. I redirected the output of the find command to a file. ... (4 Replies)
Discussion started by: bubbwe
4 Replies

5. Shell Programming and Scripting

Csh Problem using spaces in string variables

I have done something like this set phases = "a b" set phases = "phases="$phases echo $phases I get phases=a instead of phases=a b (3 Replies)
Discussion started by: kristinu
3 Replies

6. Shell Programming and Scripting

Spaces in filenames located in variables in shell.

Greetings. I am trying to do a script that will do some file copying for me. Unfortunately I have spaces in the directory names (which I cannot change) and the result is someone hard to achieve in shell scripts. I have searched everywhere on the web but does not manage to find the answer to... (3 Replies)
Discussion started by: Mr.Glaurung
3 Replies

7. Shell Programming and Scripting

White spaces issue with shell variables

Hi all, I've a requirement as below Source file src.txt sample data: A<10 white spaces>B12<5 white spaces>C<17 white spaces> A1<5 white spaces>B22<5 white spaces>C13<17 white spaces> when I'm fetching a record from this file into a shell variable like below: vRec=`head -1 src.txt... (2 Replies)
Discussion started by: madhu_1126
2 Replies

8. Shell Programming and Scripting

Spaces in variables

I'm having a problem with this.... --------------------------------------------------- #!/bin/bash SPKTAG=" | festival --tts" echo "Welcome to my shell program" "$SPKTAG"; --------------------------------------------------- I have a variable call SPKTAG " | festival --tts" and I... (2 Replies)
Discussion started by: digitalviking
2 Replies

9. Shell Programming and Scripting

Working with lines or variables that have spaces or special characters

Example: while read line do stat -c %G $line done < somefile.txtThe problem is that inside somefile.txt lines can have any symbol allowed as file name, like (). Even with spaces, it splits the words. somefile.txt:dira/my first jump.avi dirb/surf video (1080p).mkv (2 Replies)
Discussion started by: Tribe
2 Replies

10. Shell Programming and Scripting

Curl not accepting spaces in script via variables

Hi All, I'm trying to run a script which issues rest commands via curl to an endpoint. If I put spaces in fields via something like insomnia, it works, but when I try from an input file, it's failing with a json error. while IFS=, read mname oname <------ my input file... (10 Replies)
Discussion started by: say170
10 Replies
lpadmin(8)							    Apple Inc.								lpadmin(8)

NAME
lpadmin - configure cups printers and classes SYNOPSIS
lpadmin [ -E ] [-U username ] [ -h server[:port] ] -d destination lpadmin [ -E ] [-U username ] [ -h server[:port] ] -p destination [ -R name-default ] option(s) lpadmin [ -E ] [-U username ] [ -h server[:port] ] -x destination DESCRIPTION
lpadmin configures printer and class queues provided by CUPS. It can also be used to set the server default printer or class. When specified before the -d, -p, or -x options, the -E option forces encryption when connecting to the server. The first form of the command (-d) sets the default printer or class to destination. Subsequent print jobs submitted via the lp(1) or lpr(1) commands will use this destination unless the user specifies otherwise with the lpoptions(1) command. The second form of the command (-p) configures the named printer or class. The additional options are described below. The third form of the command (-x) deletes the printer or class destination. Any jobs that are pending for the destination will be removed and any job that is currently printed will be aborted. CONFIGURATION OPTIONS
The following options are recognized when configuring a printer queue: -c class Adds the named printer to class. If class does not exist it is created automatically. -i interface Sets a System V style interface script for the printer. This option cannot be specified with the -P option (PPD file) and is intended for providing support for legacy printer drivers. -m model Sets a standard System V interface script or PPD file for the printer from the model directory or using one of the driver interfaces. Use the -m option with the lpinfo(8) command to get a list of supported models. -o cupsIPPSupplies=true -o cupsIPPSupplies=false Specifies whether IPP supply level values should be reported. -o cupsSNMPSupplies=true -o cupsSNMPSupplies=false Specifies whether SNMP supply level (RFC 3805) values should be reported. -o job-k-limit=value Sets the kilobyte limit for per-user quotas. The value is an integer number of kilobytes; one kilobyte is 1024 bytes. -o job-page-limit=value Sets the page limit for per-user quotas. The value is the integer number of pages that can be printed; double-sided pages are counted as two pages. -o job-quota-period=value Sets the accounting period for per-user quotas. The value is an integer number of seconds; 86,400 seconds are in one day. -o job-sheets-default=banner -o job-sheets-default=banner,banner Sets the default banner page(s) to use for print jobs. -o name=value Sets a PPD option for the printer. PPD options can be listed using the -l option with the lpoptions(1) command. -o name-default=value Sets a default server-side option for the destination. Any print-time option can be defaulted, e.g. "-o cpi-default=17" to set the default "cpi" option value to 17. -o port-monitor=name Sets the binary communications program to use when printing, "none", "bcp", or "tbcp". The default program is "none". The specified port monitor must be listed in the printer's PPD file. -o printer-error-policy=name Sets the error policy to be used when the printer backend is unable to send the job to the printer. The name must be one of "abort- job", "retry-job", "retry-current-job", or "stop-printer". The default error policy is "stop-printer" for printers and "retry-current- job" for classes. -o printer-is-shared=true/false Sets the destination to shared/published or unshared/unpublished. Shared/published destinations are publicly announced by the server on the LAN based on the browsing configuration in cupsd.conf, while unshared/unpublished destinations are not announced. The default value is "true". -o printer-op-policy=name Sets the IPP operation policy associated with the destination. The name must be defined in the cupsd.conf in a Policy section. The default operation policy is "default". -R name-default Deletes the named option from printer. -r class Removes the named printer from class. If the resulting class becomes empty it is removed. -u allow:user,user,@group -u deny:user,user,@group -u allow:all -u deny:none Sets user-level access control on a destination. Names starting with "@" are interpreted as UNIX groups. The latter two forms turn user-level access control off. -v "device-uri" Sets the device-uri attribute of the printer queue. Use the -v option with the lpinfo(8) command to get a list of supported device URIs and schemes. -D "info" Provides a textual description of the destination. -E Enables the destination and accepts jobs; this is the same as running the cupsaccept(8) and cupsenable(8) programs on the destination. -L "location" Provides a textual location of the destination. -P ppd-file Specifies a PostScript Printer Description file to use with the printer. If specified, this option overrides the -i option (interface script). COMPATIBILITY
Unlike the System V printing system, CUPS allows printer names to contain any printable character except SPACE, TAB, "/", or "#". Also, printer and class names are not case-sensitive. Finally, the CUPS version of lpadmin may ask the user for an access password depending on the printing system configuration. This differs from the System V version which requires the root user to execute this command. LIMITATIONS
The CUPS version of lpadmin does not support all of the System V or Solaris printing system configuration options. SEE ALSO
cupsaccept(8), cupsenable(8), lpinfo(8), lpoptions(1), http://localhost:631/help COPYRIGHT
Copyright 2007-2013 by Apple Inc. 16 July 2012 CUPS lpadmin(8)
All times are GMT -4. The time now is 08:19 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy