在shell脚本中将脚本目录更改为用户的homedir

时间:2009-02-06 17:20:54

标签: linux bash shell

在我的bash脚本中,我需要将当前目录更改为用户的主目录。

如果我想从命令行更改为用户的 foo 主目录:

cd ~foo

哪个工作正常,但是当我从脚本做同样的事情时,它告诉我:

./bar.sh: line 4: cd: ~foo: No such file or directory
像这样的接缝会是如此微不足道的事情,但它不起作用。这有什么问题?我是否需要逃避“〜”或可能缺少引号或其他内容?

修改

当我说 user 时,我不是指运行脚本的当前用户,但通常是系统上的任何其他用户< / p>

修改

这是脚本:

#!/bin/bash

user="foo"
cd ~$user

如果用户名是硬编码的,如

cd ~foo

它可以工作,但如果它在用户变量中则不然。我在这里缺少什么?

4 个答案:

答案 0 :(得分:15)

怎么样?
cd $(getent passwd foo | cut -d: -f6)

USER=foo
eval cd ~$USER

也适用(foo是用户名)

答案 1 :(得分:8)

将其更改为:

cd $HOME

实际上,我不确定为什么cd ~whatever不起作用。我刚用一个小脚本进行测试,它运行良好:

#!/bin/bash

cd ~sbright

我实际上得到了当系统上不存在指定用户时所做的相同错误消息。您确定(并且是的,我知道这是其中一个插入的问题)用户是否存在并且指定了有效的主目录?

修改

现在我看到你在做什么了......在变量插值之前发生了波浪扩展,这就是你得到这个错误的原因。

答案 2 :(得分:0)

脚本是否由用户运行?如果是,你可以这样做: cd ~

答案 3 :(得分:-1)

你有什么理由不能这样做:

#!/bin/bash

cd /home/$USER

当然目录不在所有* nix上的/ home中,但假设您知道脚本的目标是什么操作系统/发行版,您应该能够提出一些运行良好的内容。