> Shaul Karl wrote:
> > > > 
> > > > [08:40:06 /tmp]# DAEMON=powercom
> > > > [08:41:59 /tmp]# ARGUMENTS='-m "Advice Partner/King PR750" -s 00131581 
> > > > /dev/ttyS1'
> > > > [08:42:09 /tmp]# echo $DAEMON $ARGUMENTS
> > > > powercom -m "Advice Partner/King PR750" -s 00131581 /dev/ttyS1
> > > > [08:42:17 /tmp]# `echo $DAEMON $ARGUMENTS`
> > > > Network UPS Tools - PowerCom UPS driver 0.01 (0.44.0-pre4)
> > > > Unable to open (1) Partner/King: No such file or directory
> > > > [08:42:25 /tmp]# 
> > > > 
> > > 
> > > How about trying the following:
> > > 
> > > `echo $DAEMON "$ARGUMENTS"`
> > > 
> > > The outer back-quotes are unnecessary in this case (running from the
> > > command line) but I assume you want to put this in some script.
> > > 
> > > The problem is, of course, that $ARGUMENTS gets separated by the shell
> > > into "Advice" "Parnet/King" "PR750". The extra quotes should do the
> > > trick.
> > > 
> > > -- Nimrod.
> > 
> > 
> > It is protected with quotes ("") in the first place. Why will it get separated 
> > by bash into 3 strings?
> 
> from bash(1):
>    Word Splitting
>        The  shell  scans the results of parameter expansion, com­
>        mand substitution, and arithmetic expansion that  did  not
>        occur within double quotes for word splitting.
> 
> Of course, it is not trivial how to apply that to your example. As I
> understand, 'did not occur within double quotes' refers only to the
> original text, and not to 'the results of'.
> If you want to go over the whole Expansion process, I see no way other
> than rerun the shell, as in
> sh -c "$DAEMON $ARGUMENTS"
> (This will probably not be exactly what you need, but you see what I mean).


sh -c "$DAEMON $ARGUMENTS" is working.
But it is not what I need. I need it with something like `echo $DAEMON 
$ARGUMENTS` because the final result should be to gives this to shell vars to 
debian start-stop-daemon as in
        start-stop-daemon --start --verbose --exec /sbin/$DAEMON -- $ARGUMENTS

Isn't there a way to prevent the shell from removing the quotes? Perhaps with 
a more complicated structure of single and double quotes in the definition of 
ARGUMENTS?


BTW: ps does not show the quotation:

[01:25:29 /tmp]# ps axf |grep powercom | grep -v grep
 8739 pts/9    S      0:00 powercom -m Advice Partner/King PR750 -s 00131581 
/dev/ttyS1
[01:26:02 /tmp]# 


> 
> > In any case, without the outer back-quotes that you put the DAEMON and 
> > ARGUMENTS vars are simply being displayed. And with them I am getting the 
> > previous behavior.
> > 
> > 
> > [23:26:14 /tmp]# echo $DAEMON "$ARGUMENTS"
> > powercom -m "Advice Partner/King PR750" -s 00131581 /dev/ttyS1
> > [23:31:53 /tmp]# echo $DAEMON $ARGUMENTS 
> > powercom -m "Advice Partner/King PR750" -s 00131581 /dev/ttyS1
> > [23:31:59 /tmp]# `echo $DAEMON "$ARGUMENTS"`
> > Network UPS Tools - PowerCom UPS driver 0.01 (0.44.0-pre4)
> > Unable to open (1) Partner/King: No such file or directory
> > [23:32:14 /tmp]# 
> > 
> > 
> > In case it might give someone a hint, here is the main part of powercom.c. The 
> > command line arguments get parsed here.
> > 
> > [23:35:20 models]$ grep main powercom.c -A 56
> > int main (int argc, char **argv)
> > {
> >         char    *portname, *prog, raw_data[NUM_OF_BYTES_FROM_UPS],
> >                 tmp[256], *ups_model = 0, *ups_serial_num = 0;
> >         int     i;
> > 
> >         printf ("Network UPS Tools - PowerCom UPS driver 0.01 (%s)\n",
> >                                                                 UPS_VERSION);
> >         openlog ("powercom", LOG_PID, LOG_FACILITY);
> > 
> >         prog = argv[0];
> > 
> >         if (argc == 1) {
> >                 printf("Error: no device specified!\n");
> >                 help (prog);
> >         }
> > 
> >         while ((i = getopt(argc, argv, "+hd:k:m:s:")) != EOF) {
> >                 switch (i) {
> >                         case 'd':
> >                                 sddelay = atoi(optarg);
> >                                 break;
> >                         case 'h':
> >                                 help(prog);
> >                                 break;
> >                         case 'k':
> >                                 forceshutdown(optarg);
> >                                 break;
> >                         case 'm':
> >                                 ups_model = optarg;
> >                                 break;
> >                         case 's':
> >                                 ups_serial_num = optarg;
> >                                 break;
> >                         default:
> >                                 help(prog);
> >                                 break;
> >                 }
> >         }
> > 
> >         argc -= optind;
> >         argv += optind;
> > 
> >         droproot(); 
> > 
> >         portname = NULL;
> >         for (i = strlen(argv[0]); i >= 0; i--)
> >                 if (argv[0][i] == '/') {
> >                         portname = &argv[0][i+1];
> >                         break;
> >                 }
> > 
> >         if (portname == NULL) {
> >                 printf ("Unable to abbreviate %s\n", argv[0]);
> >                 exit (1);
> >         }
> > 
> > [23:35:27 models]$
> > 
> > 
> > -- 
> >     
> >     --  Shaul Karl <[EMAIL PROTECTED]>
> > 
> >     Donate free food to the world's hungry: see http://www.thehungersite.com
> > 
> > 
> > 
> > =================================================================
> > To unsubscribe, send mail to [EMAIL PROTECTED] with
> > the word "unsubscribe" in the message body, e.g., run the command
> > echo unsubscribe | mail [EMAIL PROTECTED]
> > 
> 
>       didi

-- 
        
        --  Shaul Karl <[EMAIL PROTECTED]>

        Donate free food to the world's hungry: see http://www.thehungersite.com



İİİİİİİİİİİİİİİİİİİİİØ unsubscribe, send mail to [EMAIL PROTECTED] with
the word "unsubscribe" in the message body, e.g., run the command
echo unsubscribe | mail [EMAIL PROTECTED]

Reply via email to