如果/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
我想要制作我想要的子目录是什么?
答案 0 :(得分: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}
创建目录。但在那之后,你说的是#34;当我进入/ proj时,它仍然是一个单独的子目录&#34;。可能在这里是你的问题。
您可能已经有一个名为/proj
。 - - )
答案 1 :(得分:1)
我可能找到了clue:
“通过”set -B“命令和shell的”-B“命令行选项启用Brace扩展,并通过命令行上的”set + B“和”+ B“禁用。< / EM>“
您运行的某些其他脚本(可能是自动的,还是通过.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 ]
几个人指出。