Crie outro atalho '~~' como '~' (diretório inicial)

8

Eu quero que ~~ aponte 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?

    
por VarunAgw 29.09.2015 / 21:52

4 respostas

13

Na verdade, existe uma maneira, não é uma ótima maneira, mas é um jeito, haha!

Adicione o seguinte ao seu arquivo /etc/passwd :

~: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ê quer ~~ para imitar.

99 no meu sistema é o grupo nobody que recomendo se você fizer isso para garantir que seja um grupo com nenhuma permissão em nenhum arquivo que será usado. Teoricamente com /sbin/nologin como o shell, ele não deve poder ser usado, ele também não terá uma entrada /etc/shadow para que não tenha uma senha. Teoricamente deve ser bom, mas certifique-se de que, de alguma forma, não permita que você faça login como conta.

Como observação: não estou dizendo que isso seja uma boa ideia, mas que irá realizar a funcionalidade que você deseja.

EDIT: Por questões de integridade, isso foi sugerido por VarunAgw: Você pode adicionar o usuário normalmente com useradd -s /sbin/nologin -N tmp e, em seguida, modificar /etc/passwd e /etc/shadow para alterar o usuário tmp para ~ e alterar o local do home directory

    
por 29.09.2015 / 22:32
8

Você pode fazer uso do CDPATH e colocar um diretório literalmente chamado de ~~ em um dos seus componentes do CDPATH.

De man bash (mas o CDPATH está disponível mesmo em sh )

The search path for the cd command. This is a colon-separated list of directories in which the shell looks for destination directories specified by the cd command. A sample value is ".:~:/usr".

Isso permitirá que você faça cd ~~ .

Se você quiser fazer coisas como vi ~~/someFile de qualquer lugar na árvore de diretórios, então você está sem sorte se você insistir em ~~ literalmente, a menos que hackar 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, por exemplo, $tilda/someFile

Normalmente, coloco os arquivos acessados com frequência dentro de diretórios com nomes curtos no meu diretório pessoal, para poder acessá-los com caminhos como ~/b ou ~/l .

Naturalmente, você geralmente pode substituir diretórios com links simbólicos para diretórios o quanto quiser.

    
por 29.09.2015 / 22:23
1

A expansão ~ til do shell é principalmente programável. Ele se expande para o diretório de usuário do nome de usuário do sistema declarado em seu contexto final (e uma solução excelente nesse sentido já foi oferecida) , o valor da variável $HOME shell, ou de maneira alguma.

Então:

(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv

Eu altero $HOME o tempo todo e mantenho uma função no arquivo de ambiente do meu shell para redefini-la:

home(){
    HOME=~$USER
    cd ~; pwd
}

Se você quiser usar o ~ tilde de alguma forma que não se refira ao seu diretório pessoal, então faça isso . Apenas reatribuir $HOME . Não tenha medo disso. $HOME é apenas uma variável de shell como qualquer outra.

Outra sugestão que tenho é apenas uma ligeira expansão dos excelentes conselhos do @Pkkick sobre o uso de $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 para $CDPATH . Por exemplo:

mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2

cd é necessariamente um shell embutido, mas não é um shell POSIX especial incorporado, portanto, declarar o valor para $CDPATH não afeta seu valor de shell atual. Se você usá-lo como eu fiz acima, o valor de $CDPATH será alterado apenas para o ambiente do comando cd e será restaurado para seu valor anterior posteriormente. Eu costumo achar a técnica acima mais útil quando usada em combinação com a conclusão do histórico. Eu farei a coisa acima, mude para um diretório, execute alguns comandos, então pressione até eu voltar ao meu comando cd 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 totalmente diferente na próxima vez em que for usado.

for HOME in /tmp ~
do  mkdir -p ~/1/2
    CDPATH=~ cd 1/2
done
/tmp/1/2
/home/mikeserv/1/2
    
por 29.09.2015 / 23:35
0

Funciona perfeitamente como uma função bash:

$ function ~~ { cd /tmp; }
$ pwd
/home/jackman
$ ~~
$ pwd
/tmp
$ cd -
$ pwd
/home/jackman

Aqui está outra abordagem que vem um pouco mais perto (eu sei que não estou chegando perto dos requisitos)

function ~~ { echo /test; }

Depois, com mais alguns caracteres:

cd '~~'/subdir
vi '~~'/file
    
por 29.09.2015 / 22:01