5

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?

Sergey Golovchenko
  • 18,203
  • 15
  • 55
  • 72

4 Answers4

15

What about

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

and

USER=foo
eval cd ~$USER

works, too (foo is the username)

Johannes Weiss
  • 52,533
  • 16
  • 102
  • 136
8

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.

Sean Bright
  • 118,630
  • 17
  • 138
  • 146
0

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

Mick T
  • 377
  • 4
  • 10
-1

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.

JSBձոգչ
  • 40,684
  • 18
  • 101
  • 169
  • Thanks for quick answer but this /home/$USER is simply not going to work due to our configuration. Using "~" in my environment is the only feasible way to lookup the user's home. – Sergey Golovchenko Feb 06 '09 at 17:33
  • More generally, while /home is the usual path to home directories, it is not guaranteed. I've seem /u/home and /home/user[1-9]/ and other arrangements. – dmckee --- ex-moderator kitten Feb 06 '09 at 18:40