mkdir总是创建一个文件而不是一个目录

3
首先,我想说我不太清楚在Stack Overflow上应该寻找什么,也不知道如何查询我的问题。
简单来说,我想创建一个新目录并在其中执行一些文件操作。但是,使用我编写的脚本时,我总是得到一个文件而不是目录。无论我如何组合代码,结果似乎都是一样的。我希望大家能用他们的知识帮助我。
以下是脚本:
#!/bin/bash

 DLURL=http://drubuntu.googlecode.com/git'
 d7dir=/var/www/d7/'
 dfsettings=/var/www/d7/sites/default/default.settings.php
 settings=/var/www/d7/sites/default/settings.php

#settiing up drush
drush -y dl drush --destination=/usr/share;  

#Download and set up drupal
cd /var/www/;
drush -y dl drupal;

mkdir "$d7dir"; #this is the line that always produces a file instead a directory
                # regardless if it is replaced by the variable or entered as         
                # /var/www/d7


cd /var/www/drup*;
cp .htaccess .gitignore "$d7dir";
cp -r * "$d7dir";
cd "$d7dir";

rm -r /var/www/drup*;
mkdir "$d7dir"sites/default/files; 
chmod 777 "$d7dir"sites/default/files;  
cp "$dfsettings" "$settings";
chmod 777 "$settings";
chown $username:www-data /var/www/d7/.htaccess;
wget -O $d7dir"setupsite $DLURL/scripts/setupsite.sh; >  /dev/null 2>&1
chmod +x /var/www/setupsite; 
echo "Login Details following..."; 
read -sn 1 -p "Press any key to continue...";
bash "$d7dir"setupsite;
chown -Rh $username:www-data /var/www;
chmod 644 $d7dir".htaccess;
chmod 644"$settings";
chmod 644"$dfsettings"; 
exit

我希望有人能理解这个原因。

4
第一行和第二行末尾的单引号是否实际出现在您的代码中?如果是的话,那么d7dir变量将不会被设置。此外,您可能希望在脚本开头添加set -x,以便可以看到一些调试信息。 - user000001
这是脚本的复制还是您手动输入的?还有其他几个问题 - 最后两个 chmod 需要在 644 后面加一个空格,倒数第三个 chmod 需要在 $d7dir 前面加上一个 ",wget 缺少 $d7dir 前面的 ",wget 后面的 chmod 是错误的(应该是 "$d7dir"setupsite),等等。 - Sithsu
这两个单引号不在原文中,它们只是来自stackoverflow语法。 - Josh
1个回答

1

有许多方法可以调试 shell 脚本。

  • 在你的脚本开头添加set -x
  • 获取返回值。

    mkdir 'the-directory'
    ret=$?
    if test $ret -eq 0; then
        echo '创建成功。'
    else
        echo '创建失败。'
    fi
    
  • 设置为详细模式$ mkdir -v 'the-directory'

尝试运行此命令$ type mkdir,以检查mkdir命令。


我在mkdir后面添加了-v详细选项,然后使用sudo bash -x脚本名称启动bash。脚本运行正常,如果我以普通方式运行它,结果仍然是一个d7文件。这非常神秘,不是吗? - Josh
尝试使用$ mkdir -v $folder_name创建您的文件夹,请向我展示此命令的输出$ type mkdir - emaniacs
这里出现了相同的结果。我通过在任何其他操作之前创建目录来避免了此错误。对我而言,这似乎是gnu coreutils中的一个漏洞。我不完全确定,因此我不会将其发布为漏洞。 - Josh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接