[one-users] tm_common.sh.... typo??
Tiago Batista
tiagosbatista at gmail.com
Wed Nov 3 10:30:00 PDT 2010
During normal operation, the error is not triggered but when I was
experimenting with zfs-fuse I was able to trigger it.
I will try to demonstrate the problem with an interactive shell...
If i use the following function (note the \+ escaping) it works as
expected:
function fix_dir_slashes {
dirname "$1/file" | sed -e 's/\/\+/\//g';
}
If however I use the -E switch, for some reason it fails as the
equivalent gnu switch is -r I think.
$ function fix_dir_slashes { dirname "$1/file" | sed -e 's/\/\+/\//g'; }
$ fix_dir_slashes /usr/bin//drunk
/usr/bin/drunk
$ function fix_dir_slashes { dirname "$1/file" | sed -E 's/\/\+/\//g'; }
$ fix_dir_slashes /usr/bin//drunk
sed: invalid option -- E
(...)
I later found out that this is implementation dependent.
The behavior above is from sed 4.1.5 on a scientific linux (rhel based)
system.
On my gentoo desktop, using sed 4.2.1 I do not get an error, but a
silent fail to perform the substitution (unless I remove the \+
escaping, efectively using the regexp from the file):
$ function fix_dir_slashes { dirname "$1/file" | sed -E 's/\/\+/\//g'; }
$ fix_dir_slashes /usr/bin//drunk
/usr/bin//drunk
$ function fix_dir_slashes { dirname "$1/file" | sed -E 's/\/+/\//g'; }
$ fix_dir_slashes /usr/bin//drunk
/usr/bin/drunk
$ function fix_dir_slashes { dirname "$1/file" | sed -e 's/\/\+/\//g'; }
$ fix_dir_slashes /usr/bin//drunk
/usr/bin/drunk
At the moment this does not qualify as a bug for me, as all the linux
systems I know do not fail when paths with multiple slashes are used,
and the problem with the -E was never triggered with the default tm_nfs
scripts.
After searching some more and comparing the bsd and the gnu versions of
sed, I think I may have a solution that works on both platforms (in fact
the one above!) As I do not see the need for extended regular
expressions to perform such a simple replacement when escaping the +
char would solve it...
While at it, I propose that the usage of the $SED variable set above,
therefore defining the function as:
function fix_dir_slashes { dirname "$1/file" | $SED -e 's/\/\+/\//g'; }
Can you try this on BSD sed as I do not have a BSD shell at the moment?
Tiago
On Wed, Nov 3, 2010 at 4:09 PM, Javier Fontan <jfontan at gmail.com> wrote:
> Hello,
>
> We are using -E as BSD version needs that parameter for this regexp to
> work and in our tests was working also on linux. Can you tell us what
> is the error. Is it sed that does not recognize that command or does
> not perform the intended task?
>
> Bye
>
> On Mon, Oct 25, 2010 at 3:30 PM, Tiago Batista <tiagosbatista at gmail.com> wrote:
>> Hello all
>>
>> From tm_common.sh:
>>
>> # Takes out uneeded slashes. Repeated and final directory slashes:
>> # /some//path///somewhere/ -> /some/path/somewhere
>> function fix_dir_slashes
>> {
>> dirname "$1/file" | sed -E 's/\/+/\//g'
>> }
>>
>>
>> Should this be (notice the sed argument)?
>>
>> # Takes out uneeded slashes. Repeated and final directory slashes:
>> # /some//path///somewhere/ -> /some/path/somewhere
>> function fix_dir_slashes
>> {
>> dirname "$1/file" | sed -e 's/\/+/\//g'
>> }
>>
>>
>> I have looked for it, but found no documentation on the -E argument.
>>
>> Note that with the tm_nfs drivers this is not an issue (i think...),
>> but for some reason, when building transfer driver similar to that
>> found in http://mperedim.wordpress.com/2010/09/26/opennebula-zfs-and-xen-%E2%80%93-part-2-instant-cloning/
>> this becomes visible as I do call this code...
>>
>> Tiago
>> _______________________________________________
>> Users mailing list
>> Users at lists.opennebula.org
>> http://lists.opennebula.org/listinfo.cgi/users-opennebula.org
>>
>
>
>
> --
> Javier Fontan, Grid & Virtualization Technology Engineer/Researcher
> DSA Research Group: http://dsa-research.org
> Globus GridWay Metascheduler: http://www.GridWay.org
> OpenNebula Virtual Infrastructure Engine: http://www.OpenNebula.org
>
More information about the Users
mailing list