Quero ~~
apontar para um diretório diferente para que eu possa usá-lo como um atalho. Eu quero que ele tenha exatamente as mesmas funcionalidades que ~
. Como posso fazer isso?
Quero ~~
apontar para um diretório diferente para que eu possa usá-lo como um atalho. Eu quero que ele tenha exatamente as mesmas funcionalidades que ~
. Como posso fazer isso?
Respostas:
Na verdade, existe uma maneira, não é uma ótima maneira, mas é uma maneira, haha!
Adicione o seguinte ao seu /etc/passwd
arquivo:
~:x:1111:99:special Character user:/test:/sbin/nologin
substitua o 1111
como o UID por algo que faça sentido, substitua /test
pelo diretório que você deseja imitar.
99
no meu sistema é o nobody
grupo que eu recomendo, se você fizer isso para garantir que seja um grupo sem permissões em qualquer arquivo que será usado. Teoricamente, /sbin/nologin
como o shell, ele não deve poder ser usado, também não terá uma /etc/shadow
entrada, portanto não terá uma senha. Teoricamente, tudo bem, mas certifique-se de que isso não permita que você faça login como a conta.
Como uma observação lateral: não estou dizendo de forma alguma que essa é uma boa idéia, mas ela alcançará a funcionalidade que você deseja.
EDIT: Para completar amor este foi sugerido por VarunAgw: Você pode adicionar o usuário como normal com useradd -s /sbin/nologin -N tmp
e, em seguida, modificar /etc/passwd
e /etc/shadow
mudar o usuário tmp
para ~
e alterar o local dohome directory
useradd 'tmp'
e, em seguida, substituir tmp
com~
shadow
entrada, mas suponho que, desde que nenhuma senha seja definida, não é realmente um risco adicional.
Você pode usar o CDPATH e colocar um diretório literalmente nomeado ~~
em um dos seus componentes do CDPATH.
De man bash
(mas o CDPATH está disponível mesmo em sh
)
O caminho de pesquisa para o comando cd. Esta é uma lista de diretórios separados por dois pontos, em que o shell procura os diretórios de destino especificados pelo comando cd. Um valor de amostra é ".: ~: / Usr".
Isso permitirá que você faça cd ~~
.
Se você quiser fazer coisas como vi ~~/someFile
em qualquer lugar da árvore de diretórios, não terá sorte se insistir ~~
literalmente, a menos que invadir seu shell, no entanto, você pode usar variáveis ou variáveis de ambiente para armazenar seus diretórios mágicos, para que você possa fazer isso. , por exemplo,$tilda/someFile
Normalmente, coloco arquivos acessados frequentemente em diretórios nomeados em breve no meu diretório pessoal, para que eu possa acessá-los com caminhos como ~/b
ou ~/l
.
Naturalmente, você geralmente pode substituir diretórios por links simbólicos para diretórios o quanto quiser.
A ~
expansão de til do shell é principalmente programável. Ele se expande para o diretório do usuário do nome de usuário do sistema declarado em seu contexto final (e uma excelente solução nesse sentido já foi oferecida) , o valor da $HOME
variável do shell ou não é o caso.
Assim:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv
Eu mudo $HOME
o tempo todo e mantenho uma função no arquivo de ambiente do meu shell para redefini-lo:
home(){
HOME=~$USER
cd ~; pwd
}
Se você quiser usar o ~
til de alguma forma que não se refira ao seu diretório pessoal, faça-o . Apenas reatribua $HOME
. Não tenha medo disso. $HOME
é apenas uma variável de shell como qualquer outra.
Outra sugestão que tenho é apenas uma pequena expansão dos excelentes conselhos do @ PSkocik sobre o uso $CDPATH
. Uma coisa que ele não mencionou, porém, é que você pode usar e alterar $CDPATH
inline sem alterar o valor atual do shell $CDPATH
. Por exemplo:
mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2
cd
é necessariamente um builtin shell, mas não é um POSIX especial builtin shell, e assim declarar o valor para $CDPATH
não afeta seu valor shell atual. Se você usá-lo como eu fiz acima $CDPATH
, o valor de apenas será alterado para o ambiente do cd
comando one e será restaurado ao seu valor anterior posteriormente. Costumo achar a técnica acima mais útil quando usada em combinação com a conclusão do histórico. Farei o que foi dito acima, mudarei para um diretório, executarei alguns comandos e pressione até voltar ao meu cd
comando e retroceder um segmento de caminho ou dois para mover para outro lugar.
Agora, se você combinar esses dois conceitos, poderá fazer com que um comando usado anteriormente signifique algo completamente diferente na próxima vez que você o usar.
for HOME in /tmp ~
do mkdir -p ~/1/2
CDPATH=~ cd 1/2
done
/tmp/1/2
/home/mikeserv/1/2
Funciona perfeitamente bem como uma função bash:
$ function ~~ { cd /tmp; }
$ pwd
/home/jackman
$ ~~
$ pwd
/tmp
$ cd -
$ pwd
/home/jackman
Aqui está outra abordagem que se aproxima um pouco (sei que não estou chegando tão perto dos requisitos)
function ~~ { echo /test; }
Depois, com mais alguns personagens:
cd `~~`/subdir
vi `~~`/file
cd ~~/foo/bar
não vai funcionar tão bem, ou vim ~~/foo.txt
etc ...
CDPATH
variável para lidar com o cd
caso.
~
. E ~
não é usado como um comando.
CDPATH
é que ele não funciona para comandos fora do .... CD. cd ~~
Ou seja, você poderia ou cd ~~/testdir1
não, você não poderiavim ~~testdir1
alias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '