我需要在我的 nodejs 脚本中解压缩一个文件:
var exec = require('child_process').exec;
var execOptions = { timeout: 15000 };
exec('bash unzip.sh', execOptions, function (error) {
...
});
在 unzip.sh 中我执行:
set -e
unzip my_file.zip -d /var/tmp/my_dir
目标目录的大小有一些配额限制。有时我得到:
write error (disk full?). Continue? (y/n)
然后 15 秒后 exec() 因超时而失败(这是正常的)。
我怎样才能告诉解压缩不要提示用户并立即失败,以避免 15 秒超时?
我已尝试过unzip my_file.zip -d /var/tmp/my_dir 2> /dev/null
,但是没有用。
答案1
我没有找到告诉 unzip 切换到非交互模式的选项,但我找到了一个解决方法。我知道这看起来很丑,但请尝试一下:
/bin/echo "n" | /usr/bin/unzip -o $zipfile -d $dir
它将发送“n”作为对 unzip 问题的答复。
答案2
unzip -qq $file -d $dest
奇迹般有效。
答案3
我建议参考 unzip 命令可以设置的选项。因此输入man unzip
或unzip --help
。
大部分情况下,该-f
选项会强制执行操作而不提示您。该-q
选项会减少输出。将这两个选项和上面我提到的参考资料中可能找到的一些其他选项结合起来,可以帮助您获得正确的选项。
答案4
另一个解决方案是使用已关闭的文件句柄作为标准。Unzip 将像往常一样工作,但如果它提示输入,它将自动关闭。
$ ls
spacefiller test.zip
$ unzip test.zip
Archive: test.zip
inflating: test.bin
test.bin: write error (disk full?). Continue? (y/n/^C) ^C$
$ rm test.bin
$ unzip test.zip <&-
Archive: test.zip
inflating: test.bin
test.bin: write error (disk full?). Continue? (y/n/^C)
warning: test.bin is probably truncated
$ echo $!
24130
该解决方案也适用于其他类似问题。
unzip -qq test.zip
与上述类似,出口号码也类似。