¿Qué hace el pequeño squiggly ~ en Linux?

25

Tengo dos casos de uso y me pregunto qué hace cada uno:

  1. service=~

  2. mv ~/Desktop/Service$version.tgz $service

¿Qué hace el pequeño garabato ~?

Entonces, después de eso, ¿qué haría cd $service?

O_O
fuente
3
esto merece una etiqueta [squiggly]
cregox
3
Tilde, es específico de shell y no específico para Linux.
David Allan Finch
@Cawas: Pregunta y recibirás.
Dave Sherohman
@ Dave gracias! Pero parece que Chris lo odiaba. Oh bueno, la vida sigue ...
cregox
¿Es realmente la primera vez que se le pregunta esto? Esperaba que esto se cerrara como un duplicado.
Erik B

Respuestas:

45

La cosa ondulada se llama "tilde".

Se expande a su directorio de inicio.

Tratar

echo ~
echo $HOME

Ambas declaraciones ponen su directorio de inicio por sí solo en una línea

Ver bash Tilde Expansion para más detalles.

Mikel
fuente
8
La comparación anterior, aunque válida, es quizás engañosa: la tilde solo funciona durante la interpretación de shell en scripts y en la línea de comando. La variable de entorno $ HOME, sin embargo, funciona en cualquier lugar donde funcione una variable de entorno, que es mucho más lugares.
Mei
36

El "squiggly" se llama tilde. Se utiliza para referirse a su directorio de inicio que en Linux es normalmente /home/username . También se almacena en la $HOMEvariable de entorno. Expandir ~a la ubicación del directorio de inicio es el trabajo del shell (como zsh o bash) o el administrador de archivos (como Nautilus) y no el sistema de archivos o el sistema operativo en sí.

También puede usar esto para referirse al directorio de inicio de otro usuario. Por ejemplo, si el nombre de usuario del otro usuario es bob, puede consultar su directorio de inicio con ~bob, que se ampliará a /home/bob/.

El primer ejemplo que ha dado establece la variable serviceen ~, por lo que corresponde a su directorio de inicio. Esto es equivalente a service=/home/usernameo service=$HOME.

El segundo ejemplo copia el archivo ~/Desktop/Service$version.tgz(o /home/username/Desktop/Service$version.tgz) en /home/username. Este comando es equivalente a:

mv ~/Desktop/Service$version.tgz ~

o

mv ~/Desktop/Service$version.tgz $HOME

o

mv ~/Desktop/Service$version.tgz /home/username/

El tercero cambiará el directorio de trabajo actual ( $PWD) a /home/username/. Esto es equivalente a:

cd /home/username/

o

cd $HOME
Wuffers
fuente
3
Una cosa adicional a tener en cuenta: la expansión de Tilde es el trabajo del shell o del administrador de archivos, no es una función del sistema de archivos Linux en sí. Por lo tanto, a menudo no funcionará en los archivos de configuración y si agrega comillas alrededor de "~", detendrá su expansión en el shell.
Grumbel
3
También se debe tener en cuenta que los directorios de inicio no necesariamente se encuentran en / home, por lo que no se debe suponer que ~ se expande a / home / [mi nombre de usuario] o que ~ bob se expande a / home / bob
darkliquid
Gracias por la sugerencia @Grumbel. ¡Y gracias a @PriceChild por agregar la sugerencia de @ darkliquid!
Wuffers
10

En ambos # 1 y # 2: ~ es su directorio de inicio, por lo que si es qwerty probablemente será el directorio / home / qwerty. Así que trata ls ~de ver eso.

Para el n. ° 1: me parece que el servicio variable se está definiendo como su directorio de inicio.

Eso significa que después de que el n. ° 2 haya movido el archivo tgz del subdirectorio Desktop al directorio de inicio, el n. ° 3 cambia al directorio de inicio.

nomaderWhat
fuente
5

Parece que los comandos están haciendo lo siguiente.

  1. Asigne una variable llamada servicio a la ubicación de su carpeta de inicio, por ejemplo:

    /home/user
    
  2. Mueve el archivo desde su escritorio al nivel superior de su directorio de inicio, por ejemplo:

    /home/user/Desktop/Service$version.tgz $service
    
  3. El script luego cambia el directorio al nivel superior del directorio de inicio.

Entonces, todo lo que está haciendo el script es simplemente limpiar su escritorio moviendo el archivo a su /home/usercarpeta.

James
fuente
1

Agregaré aquí que ~ user también se expande al directorio de inicio de [user], por lo que no es solo un acceso directo para su propio directorio de inicio.

P.ej:

[guy@abox anotherdir]$ cd ~ 
[guy@abox ~]$ pwd
/home/guy
[guy@abox ~]$ cd ~john
[guy@abox john]$ pwd
/home/john
Rooke
fuente