gpt4 book ai didi

linux - 为什么这个脚本不能执行另一个脚本

转载 作者:太空宇宙 更新时间:2023-11-04 05:27:14 25 4
gpt4 key购买 nike

此脚本查找其中包含字符串 RECHERCHE 的所有用户。我尝试在 sudo 中运行它并且它有效,但随后在第 8 行停止(权限被拒绝)。即使从脚本中删除 sudo,此问题仍然会发生。

#!/bin/bash
#challenge : user search and permission rewriting
echo -n "Enter string to search : "
read RECHERCHE
echo $(cat /etc/passwd | grep "/home" | cut -d: -f5 | grep -i "$RECHERCHE" | sed s/,//g)
echo "Changing permissions"
export RECHERCHE
sudo ./challenge2 $(/etc/passwd) &

然后,第二个脚本会在后台更改 RECHERCHE 找到的每个用户的每个文件的权限。如果您能帮我找出哪里做得不对,那就太好了。我

#!/bin/bash
while read line
do

if [-z "$(grep "/home" | cut -d: -f5 | grep -i "$RECHERCHE")" ]
then
user=$(cut -f: -f1)
file=$(find / -user $(user))
if [$(stat -c %a file) >= 700]
then
chmod 700 file 2>> /home/$(user)/challenge.log
fi
if [$(stat -c %a file) < 600]
then
chmod 600 file 2>> /home/$(user)/challenge.log
fi
umask 177 2>> /home/$(user)/challenge.log
fi
done

我必须清楚自己在做什么。

最佳答案

$(...) 语法意味着命令替换,即:它将被括号内命令的输出替换。

由于 /etc/passwd 不是命令,而只是一个文本文件,因此您无法执行它。

因此,如果您想将 /etc/passwd 的内容传递给您的脚本,您只需调用它即可:

./challenge2 < /etc/passwd

或者,如果您需要特殊权限来读取文件,例如

sudo cat /etc/passwd | ./challenge2

还在您的 challenge2 脚本中,您使用 $(user) 这是错误的,因为您实际上只想扩展 user 变量:为此使用大括号,例如 ${user}

/etc/passwd?

不是你问的,但无论如何你可能不应该直接读取/etc/passwd。如果您想获取用户列表,请使用以下命令:

$ getent passwd

这可能会为您提供比 /etc/passwd 中存储的用户更多的用户,因为您的系统可能使用其他 PAM 后端(ldap,...)

关于linux - 为什么这个脚本不能执行另一个脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29475120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com