2009-02-06 16 views
5

En mi secuencia de comandos bash necesito cambiar el directorio actual al directorio de inicio del usuario.Cambie el directorio de scripts al homedir del usuario en un script de shell

si quiero cambiar de directorio home foo de usuario, desde la línea de comandos que puedo hacer:

cd ~foo 

que funciona muy bien, sin embargo cuando lo haga lo mismo desde el guiónMe dice :

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

Las costuras como que sería una cosa tan trivial, pero no está funcionando. ¿Cuál es el problema aquí? ¿Necesito escapar el "~" o tal vez faltan citas u otra cosa?

Editar

cuando digo usuario no me refiero usuario actual que se ejecuta la secuencia de comandos, pero en general cualquier otra usuario en el sistema

Editar

Aquí está el guión:

#!/bin/bash 

user="foo" 
cd ~$user 

si el nombre está codificado como

cd ~foo 

funciona, pero si es en el variables usuario entonces no lo hace. ¿Que me estoy perdiendo aqui?

+0

¿Desea el directorio de inicio del usuario foo o el directorio foo en el directorio de inicio del usuario? –

+0

Quiero el directorio de inicio del usuario foo –

+0

¿Cómo es tu shebang? –

Respuesta

15

¿Qué hay de

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

y

USER=foo 
eval cd ~$USER 

obras, también (foo es el nombre de usuario)

+0

¡Gracias! Ambos métodos funcionaron. _eval_ hizo el truco para mí. –

+0

el primero (quizás incluso con patillas en lugar de $()) es más portátil ya que no todos los shell admiten cd ~ USUARIO. –

8

Cambiar a:

cd $HOME 

En realidad, no estoy seguro de por qué cd ~whatever no funcionaría. Yo sólo he probado con un pequeño script y funcionó bien:

#!/bin/bash 

cd ~sbright 

De hecho, me sale el mismo mensaje de error que se hace cuando el usuario especificado no existe en el sistema. ¿Está seguro (y sí, sé que esta es una de esas preguntas) que el usuario existe y tiene un directorio inicial válido especificado?

Editar:

Ahora que veo lo que está haciendo en realidad ... la expansión de tilde sucede antes de la interpolación de variables, por lo que usted está recibiendo este error.

+0

Cuando digo _user_ no me refiero al usuario actual que ejecuta el script, sino a cualquier otro usuario del sistema –

+0

¿Podría publicar más de su script? –

+0

Sí, el usuario existe, lo sé porque simplemente funciona exactamente lo mismo desde la línea de comandos –

-1

¿Hay alguna razón no se puede hacer:

#!/bin/bash 

cd /home/$USER 

de los directorios del curso no están en/home en todos los * nix, pero asumiendo que conoce lo que OS/distro su guión está dirigido para, usted debería ser capaz de encontrar algo que funcione lo suficientemente bien.

+0

Gracias por la respuesta rápida, pero esto/home/$ USER simplemente no va a funcionar debido a nuestra configuración. Usar "~" en mi entorno es la única forma factible de buscar el hogar del usuario. –

+0

De manera más general, aunque/home es la ruta habitual a los directorios de inicio, no está garantizado. He parecido/u/home y/home/user [1-9]/y otros arreglos. – dmckee

0

es el guión va a ser ejecutado por el usuario? Si es así, puede hacerlo: cd ~

+0

No, no, el usuario root ejecuta la secuencia de comandos y realiza operaciones en _otros_ usuarios. –

+0

Bash debe interpretar la tilde y la variable de una forma que no esperamos. Después de un poquito de rastro y error, esto funciona: USUARIO = ~ foo; cd $ USER; –

Cuestiones relacionadas