Sponsored Content
Top Forums UNIX for Dummies Questions & Answers Passing a command in a variable Post 302394073 by Corona688 on Wednesday 10th of February 2010 11:36:25 AM
Old 02-10-2010
---------- Post updated at 10:36 AM ---------- Previous update was at 10:26 AM ----------

[/COLOR]And I just realized one really brain-dead simple solution: Let the server do the parsing. I do this over ssh sometimes.

Code:
 vpass $account bash < commands

This also prevents people from inserting clever things in the 'commands' file that end up running locally.

[rest of the post]

Your method is a little naive in a couple ways. For one thing, it's a useless use of backticks:

Code:
# bad -- a Useless Use of Cat and Useless Use of Backticks in one.
# It not only makes an extra process and wastes memory,  but
# might prevent you reading all of a file >64KB since it won't
# fit in one shell variable.
for LINE in `cat file`
do
        ...
done

# better.  Reads one line at a time with no extra process at all.
# Works on files of any size.
while read LINE
do
        ...
done < file

Also, your xargs solution could be done with one fewer process like
Code:
xargs vpass < command

Basically, whenever you do 'cat foo' you can replace that with a shell redirection in nearly all circumstances. This is quite a bit more efficient.

As for why the command isn't doing what you expect, the shell doesn't substitue strings more than once -- it won't check inside things it substitutes for things like quoted strings or variables. So embedding strings and variables in a string won't work unless you explicitly tell the shell to re-evaluate it, with eval. Note that eval supports all valid syntax so someone could inject variables or local commands where you didn't expect them by escaping $ and so forth.
Code:
#!/bin/bash
STR="\"this is a string\""
STR2='$HOSTNAME'

function args
{
  echo "Has ${#} arguments"
}

# it LOOKS right...
echo $STR
# But it's being split into "\"this" "is" "a" "string"!
args $STR
# This also looks right...
eval echo $STR
# eval tells it to re-parse the line after substitution.
eval args $STR

# This will not substitute in variables.
echo $STR2
# This will!
eval echo "$STR2"

[COLOR="#738fbf"]

Last edited by Corona688; 02-10-2010 at 12:48 PM..
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Passing the command line argument in a variable

Hi, I am new to unix. Is their a way to pass the output of the line below to a variable var1. ls -1t | head -1. I am trying something like var1=ls -1t | head -1, but I get error. Situation is: I get file everyday through FTP in my unix box. I have to write a script that picks up first... (1 Reply)
Discussion started by: rkumar28
1 Replies

2. Shell Programming and Scripting

Passing a variable in SED getting command garbled

I fairly new to SED. I have tried many different variations of this line of code and even breaking it down into its components and running them separately. They work individually without variables but when I place the $todbname variable it will either inserts the text "connect to $todbname"... (3 Replies)
Discussion started by: edewerth
3 Replies

3. Shell Programming and Scripting

Passing a variable to sudo sed command

hi, dataParse(){ line="$@" name="cat /etc/passwd | grep "$line": | cut -f6 -d':'" eval $name > sam.txt 2>&1 sudo -u $line sed -n 's/data-1/&/p' $name/test.xml >> sam1.txt } Here i getting the homedir of the accounts and is set in name variable.which returns "/home/raju" which i... (3 Replies)
Discussion started by: sachin.tendulka
3 Replies

4. Shell Programming and Scripting

passing variable values to awk command

Hi, I have a situation where I have to specify a different value to an awk command, I beleive i have the gist of this done, however I am not able to get this correct. Here is what I have so far echo $id 065859555 This value occurs in a "pipe" delimited file in postition 8. Hence I would... (1 Reply)
Discussion started by: jerardfjay
1 Replies

5. Shell Programming and Scripting

Passing a variable to sed command

Hi guys, I wanted to pass a variable to the sed command which tells which line to be deleted. a=2; echo $a; sed '$ad' c.out it is throwing an error. sed: 0602-403 "$a"d is not a recognized function. I even tried "$a" and \$a.. but it is of no use. Can you please correct me... (6 Replies)
Discussion started by: mac4rfree
6 Replies

6. Shell Programming and Scripting

passing variable to sed command not working

Hello All, I am trying to embed variable in sed command to fetch a portion of record between two pattern. This command is not working ...any suggestion on this how to place the variable in sed command to find a portion . I am using Sun OS (Solaris). Thanks JM (1 Reply)
Discussion started by: jambesh
1 Replies

7. Shell Programming and Scripting

Passing perl variable to shell command

Can we pass perl variable to shell commands. If yes, please give some example. (2 Replies)
Discussion started by: Anjan1
2 Replies

8. Shell Programming and Scripting

Passing a variable to kill command

I have a script that kicks off several processes in the background and stored their pids in a variable as follows: PID_DUMP_TRAN=$PID_DUMP_TRAN" "$! so I then have a list of pids If I echo $PID_DUMP_TRAN I get back a list of pids e.g. 8210 8211 8212 However I then want to kill all these... (5 Replies)
Discussion started by: sjmolloy
5 Replies

9. Shell Programming and Scripting

Passing Shell variable from file to another command

Hi all, I have a file looks like AAAA 111 BBBB 222 CCCC 333 need to pass variable value like var1=AAAA and var2=111 to another command for three times with next values. stuck over here cat file | while read line do export var1=`awk '{print $1}'` echo $var1 export var2=`cat file... (3 Replies)
Discussion started by: rakeshtomar82
3 Replies

10. UNIX for Advanced & Expert Users

Passing Variable in -mtime command

Hi, As the process of log cleanup, Im using the below command find $DIR -mtime +3 -type f -exec gzip {} \; The problem is I want to pass +3 as variable in my unix shell. I have defined ZPDATE=+3 in my properties file and calling this property file in my script. If i try the... (6 Replies)
Discussion started by: Deena1984
6 Replies
lppasswd(1)							    Apple Inc.							       lppasswd(1)

NAME
lppasswd - add, change, or delete digest passwords. SYNOPSIS
lppasswd [ username ] lppasswd -a [ -g groupname ] username lppasswd -x username DESCRIPTION
lppasswd adds, changes, or deletes passwords in the CUPS digest password file, passwd.md5. When run by a normal user, lppasswd will prompt for the old and new passwords. When run by the super-user, lppasswd can add new accounts (-a username), change existing accounts (user- name), or delete accounts (-x username) in the digest password file. Digest usernames do not have to match local UNIX usernames. OPTIONS
lppasswd supports the following options: -g groupname Specifies a group other than the default system group. SECURITY ISSUES
By default, the lppasswd program is not installed to allow ordinary users to change their passwords. To enable this, the lppasswd command must be made setuid to root with the command: chmod u+s lppasswd While every attempt has been made to make lppasswd secure against exploits that could grant super-user privileges to unprivileged users, paranoid system administrators may wish to use Basic authentication with accounts managed by PAM instead. SEE ALSO
lp(1), lpr(1), http://localhost:631/help COPYRIGHT
Copyright 2007-2013 by Apple Inc. 22 February 2008 CUPS lppasswd(1)
All times are GMT -4. The time now is 02:35 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy