我正在编写一个脚本来自动执行某些任务,我需要将用户添加到 /etc/group 中的组。我正在尝试使用此命令:
sudo bash -c "awk '{if (/^moli/) {$0=$0"$uservar,"}; print' /etc/group > /etc/group"
我遇到的问题是
awk: cmd. line:1: {if (/^moli/) {-bash=-bashtestuser1,}; print
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1: {if (/^moli/) {-bash=-bashtestuser1,}; print
awk: cmd. line:1: ^ unexpected newline or end of string
如果我将其更改' '
为,""
我会得到:-bash: syntax error near unexpected token '('
答案1
您的小代码中存在很多问题:
双引号内的单引号不会阻止变量替换。
因此,$0
扩展为/bin/bash
。请参阅这里。实际上,您的命令失败了,您真的很幸运!如果成功,它会清空您的
/etc/group
文件,您将会遇到严重问题。
在您发出命令的那一刻command > file
,它file
会被打开并清空以进行写入,您command
将看到一个空文件。最好使用
> file.temp && mv file.temp file
或awk -i inplace ...
。不要直接在代码中添加
bash
变量 ,而是使用选项并在内部使用。awk
awk -v var=$var
var
awk
那么该怎么办 ?
您不需要这种重复引用地狱,您可以简单地使用:
sudo awk -i inplace '...' file
或者
awk '...' file | sudo tee file.temp && sudo mv file.temp file
或者更适合你的情况sed
:
sudo sed -i '...' file
然而,您/etc/group
根本不应该手动更改。
添加用户usermod
(按照建议)这里):
sudo usermod -a -G groupName userName