我正在尝试创建一个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搞砸了但是无法使它工作。
答案 0 :(得分:0)
你需要修改你的脚本,如下所示:第一行只是赋值而不是你需要在子shell中运行它并分配。
#!/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
答案 1 :(得分:0)
成功时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
因此,如果exit > 0
,脚本将提供stdr erro消息。从这里你可以&& cd tempfoo and echo $PWD || echo "can not access $ tempfoo"
其余的去这里......