08-09-2012
Quote:
Originally Posted by
majest
The problem I encountered was that wildcards *were* expanded when I didn't want them to be. If exclude="C *.txt" then "for i in ${exclude}" expands the asterisk in *.txt to a list of .txt files in the current directory, rather than passing the string "*.txt" to tar. I couldn't see an easy way around it, hence the eval. Happy now or still hate it?
You're using eval to
avoid expansion? That's the oddest thing I've heard this week.
It's not that I "hate it". It's that it's "such a bad idea that you're going to kick yourself for it when something bad happens".
I believe tar has a --excludefile option or something like it which would be a much more elegant solution without putting self-modifying code into eval and hoping nothing bad happens.
10 More Discussions You Might Find Interesting
1. Shell Programming and Scripting
Hi,
I am new to shell scripting.I have worked somewhat with Perl though.
I am not able to find what the second line does and how does it do.
<code>
FP_RUNNING=`service filepool status`
FP_RUNNING=${FP_RUNNING%% *}
<\code>
After the first line,the variable FP_RUNNING stores '1 FilePool... (2 Replies)
Discussion started by: abhinavsinha
2 Replies
2. Shell Programming and Scripting
Hi,
Im pretty new to Unix. I came across a script which was using PLSQL inside a script and there was an unusual thing mentioned.
there was a variable assigned as
P_CUR=${1}
and one more as
V_TAGFILE="$1"
Couldnt find the difference. Also the variables were used in PLSQL... (1 Reply)
Discussion started by: njks68
1 Replies
3. Shell Programming and Scripting
Must be a bug or something. Whether I escape them or not, it will not work. No matter what I set the minimum and maximum to nothing gets caught. For instance:
find / -regex "/.{0, 50}.*" -maxdepth 1 or find / -regex "/.\{0, 50\}.*" -maxdepth 1 should pretty much catch everything residing within... (4 Replies)
Discussion started by: stevensw
4 Replies
4. Shell Programming and Scripting
Hi everyone:
I'm stuck at this point, could you guys please give me some hints about what I am doing wrong in the following script, I'm using sed for windows:
sed ^"$ {^
a^
STRINGTABLE DISCARDABLE^
BEGIN^
#define CLIENT_MODULE, "%CLIENT_MODULE%"^
#define CLIENT_ID, "%CLIENT_ID%"^... (1 Reply)
Discussion started by: edgarvm
1 Replies
5. UNIX for Dummies Questions & Answers
Hi everyone,
I've got a file that looks like this:
uid{508}pid{22224}pname{/PPROGRAM/pprgramx -profile:LIVE -serv:as ...
I want to pull the value of pid between the curly braces, or 22224 in this example. pid is always the second pair of curly braces, but the length of the number is... (7 Replies)
Discussion started by: Scottie1954
7 Replies
6. Shell Programming and Scripting
Hi Everyone,
in the below "xyz (Exception e)" part... after the curly braces, there is a new line and immediately few tabs are present before closing curly brace.
xyz (Exception e) {
}
note: there can be one or... (1 Reply)
Discussion started by: NY_777
1 Replies
7. Shell Programming and Scripting
Hi Everyone,
in the below "xyz (Exception e)" part... after the curly braces, there is a new line and immediately few tabs are present before closing curly brace.
xyz (Exception e) {
}
note: there can be one or more newlines between the curly braces.
My desired output should be ... (6 Replies)
Discussion started by: NY_777
6 Replies
8. Shell Programming and Scripting
Hi,
I have below command in one of the script. Can you please let me know what does the curly braces do over here \{1,\}. The remaining part of the code atleast I am able to understand.
sed -n 's/.*\-\()\{1,\}\)\-.*/\1/p' (13 Replies)
Discussion started by: tostay2003
13 Replies
9. Shell Programming and Scripting
Hello, i was trying to find get a command to list duplicated files so i tried
ls dir1 dir2 | awk '{x++}'
and it didnt work.
After a bit of searching online i found that it works without the curly braces
ls dir1 dir2 | awk 'x++'
I thought the curly braces were needed in awk so... (6 Replies)
Discussion started by: andy391791
6 Replies
10. UNIX for Beginners Questions & Answers
file.txt
apple
apples{
applepicture
apple9
apple cake{
abple
apple_and_cake
appleapple
apple
apple(
and my script
while read line; do
if ]; then
echo "$line"
fi
done <file.txt
read (10 Replies)
Discussion started by: cmdcmd
10 Replies
LEARN ABOUT CENTOS
shell-quote
SHELL-QUOTE(1) User Contributed Perl Documentation SHELL-QUOTE(1)
NAME
shell-quote - quote arguments for safe use, unmodified in a shell command
SYNOPSIS
shell-quote [switch]... arg...
DESCRIPTION
shell-quote lets you pass arbitrary strings through the shell so that they won't be changed by the shell. This lets you process commands
or files with embedded white space or shell globbing characters safely. Here are a few examples.
EXAMPLES
ssh preserving args
When running a remote command with ssh, ssh doesn't preserve the separate arguments it receives. It just joins them with spaces and
passes them to "$SHELL -c". This doesn't work as intended:
ssh host touch 'hi there' # fails
It creates 2 files, hi and there. Instead, do this:
cmd=`shell-quote touch 'hi there'`
ssh host "$cmd"
This gives you just 1 file, hi there.
process find output
It's not ordinarily possible to process an arbitrary list of files output by find with a shell script. Anything you put in $IFS to
split up the output could legitimately be in a file's name. Here's how you can do it using shell-quote:
eval set -- `find -type f -print0 | xargs -0 shell-quote --`
debug shell scripts
shell-quote is better than echo for debugging shell scripts.
debug() {
[ -z "$debug" ] || shell-quote "debug:" "$@"
}
With echo you can't tell the difference between "debug 'foo bar'" and "debug foo bar", but with shell-quote you can.
save a command for later
shell-quote can be used to build up a shell command to run later. Say you want the user to be able to give you switches for a command
you're going to run. If you don't want the switches to be re-evaluated by the shell (which is usually a good idea, else there are
things the user can't pass through), you can do something like this:
user_switches=
while [ $# != 0 ]
do
case x$1 in
x--pass-through)
[ $# -gt 1 ] || die "need an argument for $1"
user_switches="$user_switches "`shell-quote -- "$2"`
shift;;
# process other switches
esac
shift
done
# later
eval "shell-quote some-command $user_switches my args"
OPTIONS
--debug
Turn debugging on.
--help
Show the usage message and die.
--version
Show the version number and exit.
AVAILABILITY
The code is licensed under the GNU GPL. Check http://www.argon.org/~roderick/ or CPAN for updated versions.
AUTHOR
Roderick Schertler <roderick@argon.org>
perl v5.16.3 2010-06-11 SHELL-QUOTE(1)