Se você puder mover o arquivo para um subdiretório que evitará sua execução.
Se você não puder, existem algumas soluções alternativas:
Você pode adicionar algo de uma prioridade mais alta para que seja executado antes do executável que você está tentando evitar.
Novo diretório no PATH.
Você pode criar um executável em um nível mais alto na ordem PATH.
Se $PATH
for /usr/local/bin:/usr/bin:/bin
, um executável (vazio?) em /usr/bin
será executado com uma prioridade maior que um executável em /bin
.
Nesse sentido, você pode adicionar um caminho no início de $PATH
para garantir que o novo executável seja executado antes (em substituição a) services.py
Note que alguns shells lembram o caminho executado dos programas. No bash que é controlado pelo comando hash
(um hash -r removerá todos os programas com hash). Um novo shell bash não possui programas com hash, exceto aqueles executados nos arquivos iniciais (geralmente ~/.bashrc
e / ou ~/.profile
). Assim, um novo shell que tenha o novo PATH
em vigor no início funcionará.
Se você não puder alterar o PATH ou mover o arquivo, poderá usar uma função ou definição de alias em ~/.bashrc
ou algum outro arquivo de inicialização como ~/.profile
.
Funções e aliases têm precedência mais alta que executáveis, então, nomear uma função (ou alias) como o executável irá efetivamente substituí-la em shells que tenham essa função definida.
função
Algo tão simples como isso será feito:
services.py(){ :; } # do nothing
Para testar, você pode definir ls
para nada:
ls(){ :; }
Uma função pode ser apagada com unset -f FunctionName
.
$ unset -f ls
Para remover a função ls
.
Note que uma função não é perfeita, o executável original pode ser chamado com o caminho completo:
$ /bin/ls
listOfFiles
…
Uma função impedirá que apenas "este shell" execute o programa. Qualquer outro shell (ou programa que possa chamar execve
por si mesmo) executará o executável.
alias
Um alias é menos poderoso, apenas substitui a primeira palavra de um comando simples.
E se o comando tiver alguma forma de citar, ele evitará o alias.
$ alias ls='echo "none"'
$ ls
none
$ \ls
ListOfFiles
…
Um alias pode ser apagado com unalias AliasName
. Então, isso:
$ unalias ls
Removerá a definição de alias de ls
.
O método mais robusto para alterar o PATH. Ou pré-pendente de um novo diretório ou movendo o arquivo para um novo diretório. Inclua esse diretório no $PATH
apenas para as instâncias que terão permissão para executar o programa.