如何将一行 bash 回显到文件而不执行?

如何将一行 bash 回显到文件而不执行?

我目前正在尝试在另一个 bash 脚本中编写一个 bash 脚本。我执行以下操作:

touch /home/file.sh
echo "#!/bin/bash" >> /home/file.sh
echo "for line in $(grep -o 'guest-......' /etc/passwd | sort -u); do sudo deluser $line; done >> /home/file.sh

问题是 echo 不仅写入文件,还执行 for 循环的一部分。因此文件内容变成如下所示的内容。

#!/bin/bash
for line in guest-rbrars; do sudo deluser ; done

代替:

#!/bin/bash
for line in $(grep -o 'guest-......' /etc/passwd | sort -u); do sudo deluser $line; done >> /var/log/cron 2>&1

我如何才能将该 for 循环推送到文件而不执行其部分内容?

谢谢你!

此致

答案1

您需要转义所有特殊符号。$符号之所以特殊,是因为它代表变量名或括号内的代码块。因此,如果您运行它,bash 将首先尝试运行它在包含编写代码的脚本中然后将结果写入您的文件(/home/file.sh)。

要转义符号,请使用\符号。例如:

echo "for line in \$(grep -o 'guest-......' /etc/passwd | sort -u); do sudo deluser \$line; done" >> /home/file.sh

相关内容