我创建了一个 shell 脚本,用于删除给定目录中的重复项。如果无法读取某个文件,它会打印“访问被拒绝”后跟文件名。当我尝试./filename
在某个目录下运行(shell 文件的名称)时,所有文件都会打印出来,旁边还有“访问被拒绝”。
已授予许可:
drwxr-xr-x .
drwx------ 24 ..
-rw-r--r-- 1 file1.cpp
-rw-r--r-- 1 file2.cpp
-rwxr-xr-x 1 file3.cpp
-rwxr-xr-x 1 file2.txt
-rw-r--r-- 1 script
./script
在目录下运行命令时输出:
/file1.cpp: permission denied
/file2.cpp: permission denied
/file3.cpp: permission denied
/file2.txt: permission denied
/script.sh: permission denied
答案1
如果不看代码的话很难判断,但你的脚本可能正在做类似的事情
cp "$file" "$dir/$file"
其中$file
设置为 ,file1.cpp
并$dir
设置为 null。因此它正在执行
cp file1.cpp /file1.cpp
当然,您没有创建的权限/file1.cpp
(即在根目录中创建文件)。
因此解决方案是设置$dir
。
答案2
您不能授予脚本的访问权限,只能授予用户和组访问权限。
如果运行脚本的用户无权访问这些文件,请以有访问权限的用户身份运行该脚本。
在目录中,运行这些命令并将输出添加到问题中:
id
ls -la
然后按照通常执行的方式运行该脚本并添加该脚本的输出。