2

假设我以 root 身份运行 bash,并且我想 chown 用户的主目录ada。还要说它ada存储在一个名为的变量中$USER(因为我是从脚本中执行此操作的)。

当我尝试以下操作时,

chown -R $USER:$USER ~$USER

外壳首先执行波浪号扩展,因此它尝试 chown /home/root/ada,而不是/home/ada.

有没有办法通过嵌套的替换和正确的转义来做到这一点?

4

2 回答 2

3

波浪号扩展很棘手,不适用于这样的变量。

一种方法是使用eval

chown -R $USER:$USER $(eval echo ~"$USER")

但请确保您的USER变量不是来自不受信任的来源。

于 2015-02-25T22:03:22.297 回答
0

我来到这里是因为我遇到了这样的问题。

我想出了:

chown -R $USER:$USER $(getent passwd $USER | awk -F: '{print $6}')

但我更喜欢基于 anubhava(有点吓人)eval的建议。

谢谢!

于 2019-01-21T17:19:54.000 回答