[ 
https://issues.apache.org/jira/browse/HADOOP-7089?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Eli Collins updated HADOOP-7089:
--------------------------------

    Issue Type: Bug  (was: Improvement)

Yea, looks like readlink isn't going to work portably.  I think Allen's 
suggestion of using pwd -P is most portable, should work on Linux, BSD, OSX and 
Solaris, and is much cleaner than the current code. I'll update the patch.

The motivation is that there's a bug in the manual symlink resolution code, it 
fails when the script is called using a symlink from /, which is how Debian 
runs init scripts.  

{noformat}
/ $ ls -al /home/eli/test2
total 56
drwxr-xr-x   2 eli eli  4096 2011-01-07 10:07 .
drwxr-xr-x 136 eli eli 49152 2011-01-07 10:07 ..
lrwxrwxrwx   1 eli eli    17 2011-01-07 09:58 testl1.sh -> ../test1/test1.sh
lrwxrwxrwx   1 eli eli    17 2011-01-07 10:00 testl2.sh -> ../test1/test2.sh
/ $ cat /home/eli/test1/test1.sh 
#!/bin/bash
set -e
this="${BASH_SOURCE-$0}"
while [ -h "$this" ]; do
  ls=`ls -ld "$this"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '.*/.*' > /dev/null; then
    this="$link"
  else
    this=`dirname "$this"`/"$link"
  fi
done
bin=`dirname "$this"`
script=`basename "$this"`
bin=`cd "$bin"; pwd`
this="$bin/$script"
echo $this
{noformat}

Called w/o a symlink:
{noformat}
/ $ /home/eli/test1/test1.sh
/home/eli/test1/test1.sh
{noformat}

Called via a symlink:
{noformat}
/ $ /home/eli/test2/testl1.sh 
/home/eli/test2/testl1.sh: line 15: cd: ../test1: No such file or directory
//test1.sh
{noformat}

Re-written to use pwd -P
{noformat}
/ $ cat /home/eli/test2/testl2.sh 
#!/bin/bash
bin=$(cd -P -- "$(dirname -- "${BASH_SOURCE-$0}")" && pwd -P)
script="$(basename -- "${BASH_SOURCE-$0}")"
this="$bin/$script"
echo $this
{noformat}

Called via a symlink:
{noformat}
/ $ /home/eli/test2/testl2.sh 
/home/eli/test2/testl2.sh
{noformat}

> Use readlink to get absolute paths in the scripts 
> --------------------------------------------------
>
>                 Key: HADOOP-7089
>                 URL: https://issues.apache.org/jira/browse/HADOOP-7089
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: scripts
>            Reporter: Eli Collins
>            Assignee: Eli Collins
>            Priority: Minor
>             Fix For: 0.22.0, 0.23.0
>
>         Attachments: hadoop-7089-1.patch, hadoop-7089-1.patch
>
>
> The manual link resolution logic in bin/hadoop-config.sh can be replaced with 
> readlink -m -n.  Ditto with other uses of cd + pwd to get an absolute path, 
> which can be fragile.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to