mirror of
https://github.com/apache/sqoop.git
synced 2025-05-02 03:20:31 +08:00
101 lines
3.0 KiB
Bash
101 lines
3.0 KiB
Bash
#!/bin/bash
|
|
#
|
|
# Copyright 2011 The Apache Software Foundation
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
follow_one() {
|
|
# Resolve symlinks and relative path components along a path. This requires
|
|
# its argument to be an absolute path. This does not recursively re-resolve
|
|
# symlinks; if that is required, use the 'follow' method.
|
|
|
|
target=\$1
|
|
OIFS=\$IFS
|
|
IFS='/'
|
|
|
|
# Taking each dir component along the way, build up a new target directory,
|
|
# resolving '.', '..', and symlinks.
|
|
newtarget=''
|
|
for part in \${target}; do
|
|
if [ -z "\${part}" ]; then
|
|
continue # Empty dir part. 'foo//bar'
|
|
elif [ "." == "\${part}" ]; then
|
|
continue # Nothing special to do for '.'
|
|
elif [ ".." == "\${part}" ]; then
|
|
IFS=\$OIFS
|
|
newtarget=`dirname \${newtarget}` # pop a component.
|
|
elif [ -h "\${newtarget}/\${part}" ]; then
|
|
IFS=\$OIFS
|
|
link=`readlink \${newtarget}/\${part}`
|
|
# links can be relative or absolute. Relative ones get appended to
|
|
# newtarget; absolute ones replace it.
|
|
if [ "\${link:0:1}" != "/" ]; then
|
|
newtarget="\${newtarget}/\${link}" # relative
|
|
else
|
|
newtarget="\${link}" # absolute
|
|
fi
|
|
else # Regular file component.
|
|
newtarget="\${newtarget}/\${part}"
|
|
fi
|
|
IFS='/'
|
|
done
|
|
|
|
IFS=\$OIFS
|
|
echo \$newtarget
|
|
}
|
|
|
|
follow() {
|
|
# Portable 'readlink -f' function to follow a file's links to the final
|
|
# target. Calls follow_one recursively til we're finished tracing symlinks.
|
|
|
|
target=\$1
|
|
depth=\$2
|
|
|
|
if [ -z "\$depth" ]; then
|
|
depth=0
|
|
elif [ "\$depth" == "1000" ]; then
|
|
# Don't recurse indefinitely; we've probably hit a symlink cycle.
|
|
# Just bail out here.
|
|
echo \$target
|
|
return 1
|
|
fi
|
|
|
|
# Canonicalize the target to be an absolute path.
|
|
targetdir=`dirname \${target}`
|
|
targetdir=`cd \${targetdir} && pwd`
|
|
target=\${targetdir}/`basename \${target}`
|
|
|
|
# Use follow_one to resolve links. Test that we get the same result twice,
|
|
# to terminate iteration.
|
|
first=`follow_one \${target}`
|
|
second=`follow_one \${first}`
|
|
if [ "\${first}" == "\${second}" ]; then
|
|
# We're done.
|
|
echo "\${second}"
|
|
else
|
|
# Need to continue resolving links.
|
|
echo `follow \${second} \$(( \$depth + 1 ))`
|
|
fi
|
|
}
|
|
|
|
prgm=`follow \$0`
|
|
bin=`dirname \${prgm}`
|
|
bin=`cd \${bin} && pwd`
|
|
|
|
exec \${bin}/sqoop ${applicationName} "\$@"
|