Попробуйте поместить document.getElementById
в setTimeout()
Например.
setTimeout(function(){
console.log(document.getElementById('whatever'));
}, 100);
Если это сработает, тогда это просто проблема синхронизации.
Чтобы получить полный путь использования:
readlink -f relative/path/to/file
Чтобы получить каталог файла:
dirname relative/path/to/file
Вы также можете объединить два:
dirname $(readlink -f relative/path/to/file)
Если readlink -f
недоступно в вашей системе, вы можете использовать это:
function myreadlink() {
(
cd $(dirname $1) # or cd ${1%/*}
echo $PWD/$(basename $1) # or echo $PWD/${1##*/}
)
}
Обратите внимание, что если вам нужно только перейти в каталог файла, указанного как относительный путь, вам не нужно знать абсолютный путь, относительный путь совершенно легален, поэтому просто используйте:
cd $(dirname relative/path/to/file)
, если вы хотите вернуться (во время работы скрипта) к исходному пути, используйте pushd
вместо cd
и popd
, когда вы закончите.
Попробуйте наш новый продукт библиотеки Bash realpath-lib в GitHub, который мы предоставили сообществу для бесплатного и неограниченного использования. Это чисто, просто и хорошо документировано, и это здорово учиться. Вы можете сделать:
get_realpath <absolute|relative|symlink|local file path>
Эта функция является ядром библиотеки:
if [[ -f "$1" ]]
then
# file *must* exist
if cd "$(echo "${1%/*}")" &>/dev/null
then
# file *may* not be local
# exception is ./file.ext
# try 'cd .; cd -;' *works!*
local tmppwd="$PWD"
cd - &>/dev/null
else
# file *must* be local
local tmppwd="$PWD"
fi
else
# file *cannot* exist
return 1 # failure
fi
# reassemble realpath
echo "$tmppwd"/"${1##*/}"
return 0 # success
}
Это Bash 4+, не требует никаких зависимостей, а также предоставляет get_dirname, get_filename, get_stemname и validate_path.
$cat abs.sh
#!/bin/bash
echo "$(cd "$(dirname "$1")"; pwd -P)"
Некоторые объяснения:
"$1"
dirname "$1"
cd "$(dirname "$1");
в этот относительный dir pwd -P
и получаем абсолютный путь. Опция -P
позволит избежать символических ссылок echo
это Затем запустите свой скрипт:
abs.sh your_file.txt
Это будет работать как для файла, так и для папки:
absPath(){
if [[ -d "$1" ]]; then
cd "$1"
echo "$(pwd -P)"
else
cd "$(dirname "$1")"
echo "$(pwd -P)/$(basename "$1")"
fi
}
Я использовал readlink -f для linux
, поэтому
FULL_PATH=$(readlink -f filename)
DIR=$(dirname $FULL_PATH)
PWD=$(pwd)
cd $DIR
#<do more work>
cd $PWD
PWD
уже существует в Bash, а ее значение фактически является текущим каталогом ? И используйте больше цитат.
– gniourf_gniourf
10 July 2013 в 22:45
Проблема с приведенным выше ответом идет с файлами ввода с "./" как. ./my-file.txt"
Обходное решение (из многих):
myfile="./somefile.txt"
FOLDER="$(dirname $(readlink -f "${ARG}"))"
echo ${FOLDER}
Взгляните на страницу man для realpath
, я использую это и что-то вроде:
CONTAININGDIR = $ (realpath $ {FILEPATH% / *})
< / blockquote>, чтобы сделать то, что звучит так, как вы пытаетесь сделать.
readlink -f
, к сожалению, не работает на OS X. – Emil Sit 10 July 2013 в 18:33brew install coreutils
получить его. stackoverflow.com/a/4031502/1022967 . – mpettis 26 February 2016 в 19:47basename
/dirname
не встроены), и они будут видеть, что он работает сначала, но внезапно разбивается в какой-то момент будущее, по-видимому, без веской причины. Я бы избегал предлагать это как вариант или отказываться от того, что на самом деле это не пуленепробиваемый супберт. – Camilo Martin 29 September 2016 в 18:09