假设我以root身份运行bash,并且我想chown用户ada
的主目录。还假设ada
存储在一个名为$USER
的变量中(因为我是从脚本中执行此操作的)。
当我尝试以下内容时,
chown -R $USER:$USER ~$USER
shell首先执行波浪形扩展,因此它尝试chown /home/root/ada
,而不是/home/ada
。
有没有一些方法可以通过嵌套的替换和适当的转义来做到这一点?
Tilde展开很棘手,不能处理这样的变量。
一种方法是使用eval
:
chown -R $USER:$USER $(eval echo ~"$USER")
但是要确保USER
变量不是来自不可信的来源。
我来这里是因为遇到了这种问题。
我想出了:
chown -R $USER:$USER $(getent passwd $USER | awk -F: '{print $6}')
但我更喜欢anubhava(有点吓人)基于eval
的建议。
谢谢!