Execute o script definido no local PATH no shell atual [duplicado]

1

Eu tenho um script bash localizado em um dos meus PATH locais. Quando executo o script, ele termina com um cd /some/location , mas como o script é executado em seu próprio subprocesso, ele não altera o local no shell.

Eu sei que posso executar o script usando . ./the/script.bash e posso até configurá-lo como um alias, mas gostaria de saber se existe uma maneira de executar um comando a partir de um script no meu PATH para executar em o shell atual.

- EDITAR

Aparentemente, houve alguma confusão sobre a minha pergunta inicial, então deixe-me dar um exemplo exato.

Eu tenho um script chamado windows localizado em ~/bin/ e meu .profile adiciona /home/$USER/bin à minha variável de ambiente PATH . O script windows monta a partição do meu windows (dual boot) e depois altera os diretórios para o arquivo home na minha partição do windows. O script é assim:

#!/bin/sh

mount_point="/media/$USER/windows"
if ! grep -q "[[:space:]]$mount_point[[:space:]]" /proc/mounts; then
    sudo mount -t ntfs /dev/nvme0n1p3 "$mount_point"
fi
cd "$mount_point"/Users/Justin

Agora, quando eu digito o comando windows em meu terminal, ele executa esse script, mas como o script não é executado no shell atual, o cd não altera meu diretório de shells atual.

Minha pergunta é se há uma maneira de fazer isso rodar no meu shell atual (para que quando eu executar o comando windows ele mude meu diretório) sem usar um alias para chamar o script precedido por um .

    
por blitz1616 09.10.2016 / 10:51

1 resposta

1

Com base em novas informações no OP, esta resposta foi alterada.

No seu script, você precisa empurrar o diretório em que você quer chegar quando o script terminar:

rick@dell:/$ cat /usr/local/bin/windows
pushd /boot/grub > /dev/null
ls

Quando você chama o script, você precisa apenas de um ponto e espaço na frente dele . assim:

────────────────────────────────────────────────────────────────
rick@dell:/$ . windows
fonts             grub.cfg   grubenv  locale       zapgrub.cfg
gfxblacklist.txt  grub.cfg~  i386-pc  unicode.pf2
────────────────────────────────────────────────────────────────
rick@dell:/boot/grub$ 

Acima está um exemplo simples de como chamar . windows contendo o comando push funciona em vez de chamar windows contendo o comando cd .

Para o seu script, você precisa alterar cd "$mount_point"/Users/Justin para pushd "$mount_point"/Users/Justin e chamar o script com . windows em vez de windows

    
por WinEunuuchs2Unix 09.10.2016 / 10:59