it-swarm-ja.com

Linuxの解凍:ユーザーにプロンプ​​トを表示しない

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にユーザーにプロンプ​​トを表示せず、すぐに失敗するように指示するにはどうすればよいですか?

私はもう試した unzip my_file.Zip -d /var/tmp/my_dir 2> /dev/nullしかし、これは機能しません。

1
Khachatur

unzip -qq $file -d $destは魅​​力のように機能します。

1
anu

別の解決策は、閉じたファイルハンドルを標準として使用することです。解凍は通常どおり機能しますが、入力を求めるプロンプトが表示された場合は自動的に閉じます。

$ 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

上記のように、同様の出口番号で同様に機能します。

0
Maeve Kennedy

Unzipコマンドで設定できるオプションを参照することをお勧めします。したがって、次のように入力しますman unzipまたはunzip --help

主に-fオプションは、プロンプトを表示せずに操作を強制します。 -qオプションは出力を減らします。これらの2つと、おそらく上記のリファレンスにある他のいくつかのオプションを組み合わせると、オプションを正しく取得するのに役立ちます。

0
royarisse