Change script directory to user's homedir in a

2019-04-09 08:55发布

问题:

In my bash script I need to change current dir to user's home directory.

if I want to change to user's foo home dir, from the command line I can do:

cd ~foo

Which works fine, however when I do the same from the script it tells me:

./bar.sh: line 4: cd: ~foo: No such file or directory

Seams like it would be such a trivial thing, but it's not working. What's the problem here? Do I need to escape the "~" or perhaps missing quotes or something else?

Edit

when I say user I don't mean current user that runs the script, but in general any other user on the system

Edit

Here is the script:

#!/bin/bash

user="foo"
cd ~$user

if username is hardcoded like

cd ~foo

it works, but if it is in the user variable then it doesn't. What am I missing here?

回答1:

What about

cd $(getent passwd foo | cut -d: -f6)

and

USER=foo
eval cd ~$USER

works, too (foo is the username)



回答2:

Change it to:

cd $HOME

Actually, I'm not sure why cd ~whatever wouldn't work. I've just tested with a small script and it worked fine:

#!/bin/bash

cd ~sbright

I actually get the same error message that you do when the specified user does not exist on the system. Are you sure (and yes, I know this is one of those is-it-plugged-in questions) that the user exists and has a valid home directory specified?

Edit:

Now that I see what you are actually doing... tilde expansion happens before variable interpolation, which is why you are getting this error.



回答3:

Is the script going to be run by the user? If it is you can just do: cd ~



回答4:

Is there some reason you can't do:

#!/bin/bash

cd /home/$USER

Of course directories aren't in /home on all *nixes, but assuming you know what OS/distro your script is targeted for, you should be able to come up with something that works well enough.



标签: linux bash shell