我有一个简单的脚本,用于检查文件是否具有写入权限。如果是,则它允许用户将一些文本数据附加到文件末尾。如果否,则会将用户踢出。
我正在关注通过ProgrammingKnowledge 学习 Shell 脚本的 youtube 系列。具体是视频7。
这是脚本:
echo -e "Enter file name: \c"
read filename
if [ -f $filename ]
then
if [ -w $filename ]
then
echo "Type some text data. To quit, press CTRL + d: "
cat >> $filename
else
echo "File has no write permissions"
fi
else
echo "$filename is not found"
fi
我的脚本仍然允许用户附加到提供的文件,即使它没有写权限。其他标志如-O
或-s
正在按预期工作。这里有什么问题吗?
ls -l
在可用文件上运行:
-r--r--r-- 1 nobody nobody 0 Dec 6 12:25 Mane
-r-xr-xr-x 1 root root 165 Dec 6 12:06 Ramy.txt
-r--r--r-- 1 root root 0 Dec 6 12:24 Salah
在打开调试的情况下运行脚本的输出:
[root@Console2-4KMH2 scripts]# bash -x ./hello_FILE_TEST_OPERAT_APPEND_2_File.sh
+ echo -e 'Enter file name: \c'
Enter file name: + read filename
Salah
+ '[' -f Salah ']'
+ '[' -w Salah ']'
+ echo 'Type some text data. To quit, press CTRL + d: '
Type some text data. To quit, press CTRL + d:
+ cat
我的问题得到了解决。感谢大家对我的菜鸟帖子的所有编辑。评论部分的 Stephen Harris 发现我以 root 用户身份运行脚本,并强调 root 会写入文件,即使该文件没有写入权限。我创建了一个 sudo 用户,重新运行脚本,发现它的行为符合预期(不写入没有写权限的文件)
答案1
我的问题的答案来自斯蒂芬·哈里斯的评论部分。他发现我以 root 身份运行脚本,无论是否有写权限,该脚本都会写入任何文件。