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?
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?
Respuestas:
En realidad, hay una manera, no es una gran manera, pero es una forma, ¡jaja!
Agregue lo siguiente a su /etc/passwd
archivo:
~:x:1111:99:special Character user:/test:/sbin/nologin
reemplace 1111
como el UID con algo que tenga sentido, reemplace /test
con el directorio que desea imitar ~~.
99
en mi sistema es el nobody
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 usuario tmp
a ~
y cambiar la ubicación de lahome directory
useradd 'tmp'
y luego reemplazar tmp
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 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 ~~/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.
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:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv
Lo cambio $HOME
todo 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. $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:
mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2
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 del cd
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 mi cd
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.
for HOME in /tmp ~
do mkdir -p ~/1/2
CDPATH=~ cd 1/2
done
/tmp/1/2
/home/mikeserv/1/2
Funciona perfectamente bien como una función bash:
$ function ~~ { cd /tmp; }
$ pwd
/home/jackman
$ ~~
$ pwd
/tmp
$ cd -
$ pwd
/home/jackman
Aquí hay otro enfoque que se acerca un poco (sé que no me estoy acercando tanto a los requisitos)
function ~~ { echo /test; }
Luego con un par de personajes más:
cd `~~`/subdir
vi `~~`/file
cd ~~/foo/bar
no va a funcionar tan bien, o vim ~~/foo.txt
etc ...
CDPATH
variable para manejar el cd
caso.
~
. Y ~
no se usa como un comando.
CDPATH
es que no funciona para comandos fuera de ... CD. IE puedes cd ~~
o cd ~~/testdir1
no puedesvim ~~testdir1
alias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '