This also works, and might be a little more readable(?) eval "perl -e 'printf \"%#o\", ((stat(\"$1\"))[2] & 0x1ff)'"
eval takes a pass at the string that follows and performs regular shell variable substition before executing the command, so this is the command that is executed: perl -e 'printf "%#o", ((stat("<arg1>"))[2] & 0x1ff)' where <arg1> is the actual value of the argument you passed. The output looks a little better if you terminate it with a newline: eval "perl -e 'printf \"%#o\\n\", ((stat(\"$1\"))[2] & 0x1ff)'" In general, just escape anything (with \) that the shell might try to interpret, like quotation marks, backslashes, dollar signs, semi-colons, etc. (except those that you really *do* want the shell to interpret). Marc ---------- Marc Mongeon <[EMAIL PROTECTED]> Unix Specialist Ban-Koe Systems 9100 W Bloomington Fwy Bloomington, MN 55431-2200 (612)888-0123, x417 | FAX: (612)888-3344 ---------- "It's such a fine line between clever and stupid." -- David St. Hubbins and Nigel Tufnel of "Spinal Tap" >>> Ben Cranston <[EMAIL PROTECTED]> 07/15 4:27 PM >>> > It works fine from the command line, > but I tried it in a shell script with no luck. > #! /bin/bash > perl -e 'printf "%#o", ((stat($1))[2] & 0x1ff)' > Needless to add I know as much about shell scripts > as Hillary does about New York. Yeah, the problem is that the $ is inside a ' (perl script). Try something like: perl -e 'printf "%#o", ((stat("'"$1"'"))[2] & 0x1ff)' How it works: Unix shells silently concatenate strings when they are adjacent. So these are equivalent: foo "abc" foo "a"'b'"c" The argument to perl -e above is three strings: 'aaa'"bbb"'ccc' where aaa == printf "%#o", ((stat(" note trailing doublequote bbb == $1 argument gets substituted here ccc == "))[2] & 0x1ff) note leading doublequote So, if you give "dd" as a filename the perl call gets an argument: printf "%#o", ((stat("dd"))[2] & 0x1ff) which is kind of what you want??? -- Charles B. (Ben) Cranston mailto:[EMAIL PROTECTED] http://www.wam.umd.edu/~zben -- Unsubscribe? mail -s unsubscribe [EMAIL PROTECTED] < /dev/null