Ошибка с 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"

остальные идут сюда...

Другие вопросы по тегам