0

存在しない場合は/proj、サブディレクトリを使用して新しいディレクトリを作成しようとしています。ただし、複数のサブディレクトリを作成する代わりに、という名前の単一のサブディレクトリを作成しますbin, cgi, sbin, etc.../proj{Changes...src}

#If project directory exists, then do not create a new one.                             
if [ -d /proj ]; then
     echo "Project directory exists. New directory will not be created."

#Otherwise, create a new project directory.                                             
else
     echo "Project directory does not exist. Creating a new project directory..."
     mkdir -p proj/{Changes,Makefile,bin,cgi,doc,etc,html,lib,sbin,src}
fi

必要なサブディレクトリを作成するために何が欠けていますか?

4

2 に答える 2

1
sgeorge-mn:tmp sgeorge$ ls proj
ls: proj: No such file or directory
sgeorge-mn:tmp sgeorge$ mkdir -p proj/{Changes,Makefile,bin,cgi,doc,etc,html,lib,sbin,src}
sgeorge-mn:tmp sgeorge$ ls proj
Changes     Makefile    bin     cgi     doc     etc     html        lib     sbin        src

参考:
次のことは、ディレクトリprojがにあることを意味し/ます。

if [ -d /proj ]; then

編集

私が見ている1つの確率は(真実ではないかもしれません):

コメントであなたはあなたがでディレクトリを作成することができると言っていますmkdir -p proj/{Changes,Makefile,bin,cgi,doc,etc,html,lib,sbin,src}。しかしその後、あなたは「/ projにcdしたとき、それはまだ1つのサブディレクトリである」と言っています。ここにあなたの問題があるかもしれません。

あなたはすでにそのようなディレクトリを持っているかもしれません/proj。;-)

于 2013-02-01T03:45:46.443 に答える
1

手がかりを見つけたかもしれません:

"ブレース展開は、"set -B" コマンドとシェルの "-B" コマンド ライン オプションで有効になり、コマンド ラインで "set +B" と "+B" で無効になります。 "

実行する他のスクリプト (おそらく自動的に、または を介し​​て.bashrc) がブレース展開を「オフにする」可能性はありますか? ここに私が行ったいくつかのテストがあります:

floris% /bin/bash -B
bash-3.2$ echo {1..3}
1 2 3
## ^^ brace expansion is ON

floris% /bin/bash +B
bash-3.2$ echo {1..3}
{1..3}
## ^^ brace expansion is OFF

ただし、ここで少しおかしくなります...単純なシェルスクリプトを作成するとtestbrace-:

#!/bin/bash -B
echo {1..3}

次のようにコマンドラインから実行します。

floris% ./testbrace-
{1..3}

同等のスクリプトtestbrace+:

#!/bin/bash +B
echo {1..3}

私にくれます

floris% ./testbrace+
{1..3}

つまり、+-B フラグはスクリプトの実行方法に影響を与えないようです。どちらの場合も、ブレース展開は無効です。

ただし、フラグを使用してコマンドラインから bash を具体的に呼び出すと、結果に影響を与える可能性があります。

floris% /bin/bash +B testbrace-
{1..5}
floris% /bin/bash +B testbrace+
{1..5}
floris% /bin/bash -B testbrace-
1 2 3 4 5
floris% /bin/bash -B testbrace+
1 2 3 4 5

ご覧のとおり、スクリプトはブレース展開 IFF I call it with /bin/bash -B scriptname- を実行します。この時点で、スクリプト内の B フラグは無視されます。この方法を使用してディレクトリ作成スクリプトを呼び出すと、同じ結果が得られると思います。

また、次の行を次のように変更してください。

if [ -d ./proj ]

何人かが指摘しているように。

于 2013-02-01T04:07:13.973 に答える