2017-09-11 16 views
0

作業ディレクトリが/home/user/myAppで、コマンドがjar -cvf app.war *の場合、Webアーカイブは適切な構造で作成されます。ただし、*を使用してファイルを指定する代わりに、jar -cvf app.war /home/user/myApp/*を実行してコマンドでフルパスを使用すると、すべての親ディレクトリもアーカイブに含められます。このような構造を生成フルパスのjarコマンドが正常に動作しないのはなぜですか?

| 
- META-INF 
| 
- WEB-INF 

jar -cvf app.war /home/user/myApp/*ながら:

| 
- home 
    | 
    - user 
     | 
      - myApp 
       | 
       - WEB-INF 
| 
- META-INF 

が、これはバグですつまり

jar -cvf app.war *が正しく次のような構造を生成しますか?私はこのように行動する他のコマンドについて考えることはできません。これはJDK 1.6でテストされました。

+1

は 'ls'で同じことを試してみて、あなたは' jar'が例外ではないことがわかります。 – Leon

答えて

0

*は、がjarコマンドを実行する前にシェルによって展開されるglob式です。 jarコマンドでは*が表示されません。

1

*は、bashでの特殊文字(およびその他のシェル)であるglob expansion

に使用バッシュはグロブに一致する引数のリストにグロブとの議論を展開します。あなたのコマンドのjarファイルは、globs自体を展開するのではなく、globsに基づいて展開されたパスのリストを受け取っています。 2つの異なる引数のセットが与えられた場合とまったく同じように動作しています。

# Glob 
$ ls * 
bar baz foo 
# Not using Globbing 
$ ls foo bar baz 
bar baz foo 
# Glob 
$ ls /Users/will/temp/* 
/Users/will/temp/bar /Users/will/temp/baz /Users/will/temp/foo 
# Not using Globbing 
$ ls /Users/will/temp/foo /Users/will/temp/bar /Users/will/temp/baz 
/Users/will/temp/bar /Users/will/temp/baz /Users/will/temp/foo 
関連する問題