Cree otro acceso directo `~~` como `~` (directorio de inicio)
10
Quiero ~~apuntar a un directorio diferente para poder usarlo como acceso directo. Quiero que tenga exactamente las mismas funcionalidades que ~. ¿Cómo puedo hacer esto?
@ VarunAgw jaja, hallazgo divertido, justo como había pensado en la misma solución. Vergüenza. Pensé que era una mariposa única por un minuto :(
Gravy
Respuestas:
14
En realidad, hay una manera, no es una gran manera, pero es una forma, ¡jaja!
Agregue lo siguiente a su /etc/passwdarchivo:
~:x:1111:99:special Character user:/test:/sbin/nologin
reemplace 1111como el UID con algo que tenga sentido, reemplace /testcon el directorio que desea imitar ~~.
99en mi sistema es el nobodygrupo que recomiendo si haces esto para asegurarte de que sea un grupo sin permisos en cualquier archivo que alguna vez se use. Teóricamente con /sbin/nologinel shell, no debería poder usarse, tampoco tendrá una /etc/shadowentrada, por lo que no tendrá una contraseña. Teóricamente debería estar bien, pero asegúrese de que de alguna manera no le permita iniciar sesión como la cuenta.
Como nota al margen: no estoy diciendo de ninguna manera que esta sea una buena idea, pero logrará la funcionalidad que desea.
EDIT: Para completarlo esto fue sugerido por VarunAgw: Se podría añadir el usuario de forma normal con useradd -s /sbin/nologin -N tmpy luego modificar /etc/passwdy /etc/shadowcambiar el usuario tmpa ~y cambiar la ubicación de lahome directory
En lugar de cambiar UID y GID, podemos simplemente useradd 'tmp'y luego reemplazar tmpcon~
VarunAgw
Cierto. buena sugerencia. No estoy seguro de cómo me siento al legitimarlo con una shadowentrada, pero supongo que siempre que no se configure una contraseña no es realmente un riesgo adicional.
Salsa
8
Puede utilizar CDPATH y colocar un directorio literalmente nombrado ~~ en uno de sus componentes CDPATH.
Desde man bash(pero CDPATH está disponible incluso en sh)
La ruta de búsqueda para el comando cd. Esta es una lista de directorios separados por dos puntos en los que el shell busca los directorios de destino especificados por el comando cd. Un valor de muestra es ".: ~: / Usr".
Eso te permitirá hacer cd ~~.
Si desea hacer cosas como vi ~~/someFiledesde cualquier parte del árbol de directorios, entonces no tiene suerte si insiste ~~literalmente a menos que piratee su shell, sin embargo, puede usar variables o variables de entorno para almacenar sus directorios mágicos para que pueda hacerlo , p.ej,$tilda/someFile
Por lo general, pongo archivos a los que se accede a menudo dentro de directorios con nombres cortos en mi directorio de inicio para poder acceder a ellos con rutas como ~/bo ~/l.
Naturalmente, generalmente puede reemplazar directorios con enlaces simbólicos a directorios tanto como desee.
La ~expansión de tilde del shell es principalmente programable. Se expande al directorio de usuarios del nombre de usuario del sistema declarado en su contexto final (y ya se ha ofrecido una excelente solución en este sentido) , el valor de la $HOMEvariable de shell, o no se ofrece en absoluto.
Entonces:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp/home/mikeserv
Lo cambio $HOMEtodo el tiempo y mantengo una función en el archivo de entorno de mi shell para restablecerlo:
home(){
HOME=~$USER
cd ~; pwd}
Si desea utilizar la ~tilde de alguna manera que no se refiera a su directorio de inicio, hágalo . Solo reasignar $HOME. No tengas miedo de eso. $HOMEes solo una variable de shell como cualquier otra.
Otra sugerencia que tengo es solo una ligera expansión de los excelentes consejos de @ PSkocik sobre el uso $CDPATH. Sin embargo, una cosa que no mencionó es que puede usar y modificar en $CDPATHlínea sin cambiar el valor de shell actual $CDPATH. Por ejemplo:
mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2
cdes necesariamente una construcción de shell, pero no es una construcción de shell especial POSIX , por lo que declarar el valor de $CDPATHno afecta a su valor de shell actual. Si lo usa como lo hice anteriormente $CDPATH, el valor solo se modifica para el entorno del cdcomando único , y luego se restaura a su valor anterior. Tiendo a encontrar la técnica anterior más útil cuando se usa en combinación con la finalización del historial. Haré lo anterior, cambiaré a un directorio, ejecutaré algunos comandos, luego presionaré hasta que regrese a mi cdcomando y retroceda un segmento de ruta o dos para moverme a otro lugar.
Ahora, si combina estos dos conceptos, puede hacer que un comando utilizado anteriormente signifique algo completamente diferente la próxima vez que lo use.
for HOME in/tmp ~do mkdir -p ~/1/2
CDPATH=~ cd 1/2done
Bueno, cd ~~/foo/barno va a funcionar tan bien, o vim ~~/foo.txtetc ...
derobert
1
La pregunta no está clara. Si ese es el uso deseado, usaría la CDPATHvariable para manejar el cdcaso.
Glenn Jackman
Estoy de acuerdo en que no está completamente claro, pero OP pide que funcione como ~. Y ~no se usa como un comando.
derobert
Lo encontré bastante comprensible, si no completamente explicado. El problema CDPATHes que no funciona para comandos fuera de ... CD. IE puedes cd ~~o cd ~~/testdir1no puedesvim ~~testdir1
Gravy
podrías hacerlo mejor con un alias que llame a una función. comoalias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '
Respuestas:
En realidad, hay una manera, no es una gran manera, pero es una forma, ¡jaja!
Agregue lo siguiente a su
/etc/passwd
archivo:reemplace
1111
como el UID con algo que tenga sentido, reemplace/test
con el directorio que desea imitar ~~.99
en mi sistema es elnobody
grupo que recomiendo si haces esto para asegurarte de que sea un grupo sin permisos en cualquier archivo que alguna vez se use. Teóricamente con/sbin/nologin
el shell, no debería poder usarse, tampoco tendrá una/etc/shadow
entrada, por lo que no tendrá una contraseña. Teóricamente debería estar bien, pero asegúrese de que de alguna manera no le permita iniciar sesión como la cuenta.Como nota al margen: no estoy diciendo de ninguna manera que esta sea una buena idea, pero logrará la funcionalidad que desea.
EDIT: Para completarlo esto fue sugerido por VarunAgw: Se podría añadir el usuario de forma normal con
useradd -s /sbin/nologin -N tmp
y luego modificar/etc/passwd
y/etc/shadow
cambiar el usuariotmp
a~
y cambiar la ubicación de lahome directory
fuente
useradd 'tmp'
y luego reemplazartmp
con~
shadow
entrada, pero supongo que siempre que no se configure una contraseña no es realmente un riesgo adicional.Puede utilizar CDPATH y colocar un directorio literalmente nombrado
~~
en uno de sus componentes CDPATH.Desde
man bash
(pero CDPATH está disponible incluso ensh
)Eso te permitirá hacer
cd ~~
.Si desea hacer cosas como
vi ~~/someFile
desde cualquier parte del árbol de directorios, entonces no tiene suerte si insiste~~
literalmente a menos que piratee su shell, sin embargo, puede usar variables o variables de entorno para almacenar sus directorios mágicos para que pueda hacerlo , p.ej,$tilda/someFile
Por lo general, pongo archivos a los que se accede a menudo dentro de directorios con nombres cortos en mi directorio de inicio para poder acceder a ellos con rutas como
~/b
o~/l
.Naturalmente, generalmente puede reemplazar directorios con enlaces simbólicos a directorios tanto como desee.
fuente
La
~
expansión de tilde del shell es principalmente programable. Se expande al directorio de usuarios del nombre de usuario del sistema declarado en su contexto final (y ya se ha ofrecido una excelente solución en este sentido) , el valor de la$HOME
variable de shell, o no se ofrece en absoluto.Entonces:
Lo cambio
$HOME
todo el tiempo y mantengo una función en el archivo de entorno de mi shell para restablecerlo:Si desea utilizar la
~
tilde de alguna manera que no se refiera a su directorio de inicio, hágalo . Solo reasignar$HOME
. No tengas miedo de eso.$HOME
es solo una variable de shell como cualquier otra.Otra sugerencia que tengo es solo una ligera expansión de los excelentes consejos de @ PSkocik sobre el uso
$CDPATH
. Sin embargo, una cosa que no mencionó es que puede usar y modificar en$CDPATH
línea sin cambiar el valor de shell actual$CDPATH
. Por ejemplo:cd
es necesariamente una construcción de shell, pero no es una construcción de shell especial POSIX , por lo que declarar el valor de$CDPATH
no afecta a su valor de shell actual. Si lo usa como lo hice anteriormente$CDPATH
, el valor solo se modifica para el entorno delcd
comando único , y luego se restaura a su valor anterior. Tiendo a encontrar la técnica anterior más útil cuando se usa en combinación con la finalización del historial. Haré lo anterior, cambiaré a un directorio, ejecutaré algunos comandos, luego presionaré hasta que regrese a micd
comando y retroceda un segmento de ruta o dos para moverme a otro lugar.Ahora, si combina estos dos conceptos, puede hacer que un comando utilizado anteriormente signifique algo completamente diferente la próxima vez que lo use.
fuente
Funciona perfectamente bien como una función bash:
Aquí hay otro enfoque que se acerca un poco (sé que no me estoy acercando tanto a los requisitos)
Luego con un par de personajes más:
fuente
cd ~~/foo/bar
no va a funcionar tan bien, ovim ~~/foo.txt
etc ...CDPATH
variable para manejar elcd
caso.~
. Y~
no se usa como un comando.CDPATH
es que no funciona para comandos fuera de ... CD. IE puedescd ~~
ocd ~~/testdir1
no puedesvim ~~testdir1
alias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '