Ошибка с Bash Script для создания временного каталога и копирования некоторых файлов
Я пытаюсь создать каталог Temp, скопировать в него какой-то файл, выполнить некоторую обработку и удалить каталог. Пока что у меня есть:
#!/usr/bin/env bash
__tmpdir="mktemp -d /Users/Riwaz/support.XXXXXXXXXX" #Create temp directory; store address
cp /some_location/checkstyle.xml $__tmpdir #Copy a file into the directory
cd $__tmpdir
tar -czvf result.tar.gz *
cp result.tar.gz /Users/Riwaz/
rm $__tmpdir
Но когда я бегу, используя sh, я получаю:
line 7: cd: mktemp: No such file or directory
rm: mktemp: No such file or directory
rm: -d: No such file or directory
rm: /Users/Riwaz/support.XXXXXXXXXX: No such file or directory
который показывает, что оператор mktemp никогда не обрабатывается, а переменная содержит фактическую команду, а не адрес. Как заставить bash оценить команду и сохранить вместо нее адрес? Я возился с "", {} и eval, но не смог заставить его работать.
2 ответа
Вам нужно изменить ваш скрипт, как показано ниже: Первая строка - это просто присваивание, вместо этого вам нужно запустить его в суб-оболочке и назначить.
#!/usr/bin/env bash
__tmpdir=(mktemp -d /Users/Riwaz/support.XXXXXXXXXX) #Create temp directory; store address
cp /some_location/checkstyle.xml $__tmpdir #Copy a file into the directory
cd $__tmpdir
tar -czvf result.tar.gz ./*
cp result.tar.gz /Users/Riwaz/
rm $__tmpdir
mktemp завершает 0 при успехе и>0 в случае ошибки., попробуйте что-нибудь подобное. Убедитесь, что у вас достаточно прав:
tempfoo=`basename $0`
TMPFILE=`mktemp -d /tmp/${tempfoo}.XXXXXX`
if [ $? -ne 0 ]; then
echo "$0: Can't create temp file, exiting..."
exit 1
fi
Таким образом, скрипт выдаст сообщение об ошибке stdr в случае exit > 0
, Отсюда вы можете просто сделать && cd tempfoo and echo $PWD || echo "can not access $ tempfoo"
остальные идут сюда...