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

编辑

我看到的一种可能性是(可能不是真的):

在评论中,您说您可以使用mkdir -p proj/{Changes,Makefile,bin,cgi,doc,etc,html,lib,sbin,src}. 但在那之后,你会说“当我 cd 进入 /proj 时,它仍然是一个单独的子目录”。可能这里是你的问题。

您可能已经有一个名为/proj.;-)的目录

于 2013-02-01T03:45:46.443 回答
1

我可能找到了线索

"大括号扩展通过 "set -B" 命令和 shell 的 "-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

不过,这里有点疯狂……如果我创建一个简单的 shell 脚本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 我称之为/bin/bash -B scriptname- 此时它会忽略脚本中的 B 标志。如果您使用此方法调用您的目录创建脚本,我希望您会得到相同的结果。

另外,请确保将下一行更改为

if [ -d ./proj ]

正如几个人指出的那样。

于 2013-02-01T04:07:13.973 回答