终端运行Bash脚本mkproj.sh提示mkdir创建目录权限被拒绝报错
问题原因
- 你运行
./mkproj.sh时没有传入参数,脚本层面的$1、$2都是空值,而你在调用check_for_file函数时传入了这两个空值,导致函数接收到的参数计数$#为2,不会触发参数为0时的默认myproject命名逻辑。 - 进入else分支后,
testing_file被赋值为空的$1,拼接路径时就变成了/{archive,backups,...}这类根目录下的路径,普通用户默认没有根目录写入权限,所以抛出权限不足报错。
解决方案
方法1:快速修复
直接修改脚本最后一行的函数调用逻辑,去掉多余的$2传参即可:
把check_for_file "$1" "$2"改为check_for_file "$1"
修改后运行脚本不传参数时,函数收到的参数数量为0,会自动用myproject作为默认项目名创建目录,不会再写入根目录。
方法2:优化脚本健壮性(推荐)
可以给变量设置默认值,同时合并重复的目录创建逻辑,简化后的参考脚本如下:
#!/bin/bash check_for_file() { # 变量默认值:如果$1为空就用myproject local testing_file=${1:-myproject} if [ -d "$testing_file" ]; then echo "Directory name already exists" exit 1 fi mkdir -p "$testing_file"/{archive,backups,docs/{html,txt},assets,database,src/{sh,c}} } check_for_file "$1"
该版本兼容两种调用场景:传参数就用传入的名称作为项目名,不传参数就默认用myproject创建目录。
内容的提问来源于stack exchange,提问作者gogo
相关产品推荐
相关产品推荐

