【发布时间】:2021-11-25 18:33:47
【问题描述】:
到目前为止,我的脚本运行良好。当我从终端调用 ./mkproj.sh 时,它显示它有两个参数(我假设是因为我用 $1 和 $2 调用它),然后继续给出以下错误消息:
参数数量 2
mkdir: 无法创建目录'/archive': 权限被拒绝
mkdir: 无法创建目录'/backups': 权限被拒绝
mkdir:无法创建目录“/docs”:权限被拒绝
mkdir:无法创建目录“/docs”:权限被拒绝
mkdir: 无法创建目录'/assets': 权限被拒绝
mkdir: 无法创建目录'/database': 权限被拒绝
mkdir: 无法创建目录'/src': 权限被拒绝
mkdir: 无法创建目录'/src': 权限被拒绝
我检查了我的文件,包括隐藏文件,并且没有名为 myproject.xml 的文件。我还拥有 mkproj.sh 的执行、读取和写入权限。这是我的脚本:
#!/bin/bash
check_for_file()
{
echo "first argument $0"
echo "second argument $1"
echo "third argument $2"
echo "num arguments $#"
if [ $# -eq 0 ]; then
local testing_file=myproject
if [ -d "$testing_file" ]; then
echo "Directory name already exists"
exit
else
mkdir -p "$testing_file"/{archive,backups,docs/{html,txt},assets,database,src/{sh,c}}
fi
else
local testing_file=$1
if [ -d "$testing_file" ]; then
echo "Directory name already exists"
exit
else
mkdir -p "$testing_file"/{archive,backups,docs/{html,txt},assets,database,src/{sh,c}}
fi
fi
}
check_for_file "$1" "$2"
谢谢!
【问题讨论】:
-
你把你的脚本叫做什么?在没有任何参数的情况下,您对
check_for_file "$1" "$2"的调用使用空参数调用check_for_file。但是$#仍然会看到两个空字符串,所以$#仍然是两个。您的else子句是否以空 $1 运行,因此文件将写入/ -
似乎缺少
testing_file路径。你检查if [ -d "$testing_file" ];上的testing_file路径了吗?您需要将其更改为完整路径或相对路径。 -
如何检查 testing_file 路径?我不确定这意味着什么。
-
未定义变量“myproject”,因此当您执行“testing_file=myproject”时,“testing_file”将为空,稍后当您尝试使用变量“testing_file”创建文件夹时,您实际上是在创建“/”下的文件,并且运行脚本的用户没有权限。
-
@gogo:您没有编写调用脚本的方式,因此很难判断究竟出了什么问题。你为什么不用
-x运行你的脚本,看看它为什么以及在哪里退出?
标签: bash permissions