【问题标题】:Error with Bash Script to create a Temp directory and copy some filesBash 脚本创建临时目录并复制一些文件时出错
【发布时间】:2016-08-05 01:37:24
【问题描述】:

我正在尝试创建一个临时目录,将一些文件复制到其中,进行一些处理,然后删除该目录。到目前为止,我有:

#!/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,但无法正常工作。

【问题讨论】:

  • mktemp 成功时退出 0,如果发生错误则 >0。

标签: bash mktemp


【解决方案1】:

您需要修改您的脚本,如下所示:第一行只是分配,而不是您需要在子 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

【讨论】:

    【解决方案2】:

    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 错误消息。从这里你可以做&& cd tempfoo and echo $PWD || echo "can not access $ tempfoo"

    剩下的都在这里...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-26
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 2012-06-14
      • 1970-01-01
      • 2013-01-19
      相关资源
      最近更新 更多