Como permitir que um script seja executado por qualquer pessoa em qualquer lugar

1

Este tópico já foi discutido, mas cada post que li me confunde ainda mais.

Por exemplo, pegue este simples script bash hello world chamado test. Eu criei como o usuário Bill e fiz um chmod 755 test para torná-lo executável. O script reside em /home/Bill/scripts e tentei exportar PATH=$PATH:/home/Bill/scripts

Enquanto estou nesse diretório, posso executar o script usando ./test . Mas se eu voltar para /home/Bill eu recebo um "-bash: ./test: Nenhum arquivo ou diretório"

E se eu mudar para o root, não consigo encontrar o script, embora tenha adicionado ao meu caminho do ambiente ou acho que usei o comando de exportação.

Eu também li que posso adicionar o caminho do script no meu /etc/sudoers e não tenho nenhuma senha necessária, mas isso exige que o usuário execute sudo ./test . Existe alguma maneira de tornar este script universalmente acessível e executável a partir de qualquer usuário em qualquer lugar?

Como outra nota, estou confuso na diferença entre ./test vs test Eu criei o script como test mas quando eu ou qualquer outro usuário o executa, eles executam como ./test ou apenas test

    
por James Smith 01.04.2017 / 19:21

2 respostas

3

Você pode executar um script especificando um caminho (relativo ou absoluto) para o script ou garantindo que o diretório que contém o script esteja na pesquisa do seu shell $PATH .

Ignorando temporariamente o fato de que test não é um bom nome para este exemplo, como existem outros test s seu shell pode escolher executar, você sempre pode executar o script pelo nome test se o diretório contendo está no seu $PATH . Isto é o que você fez com export PATH=$PATH:/home/Bill/scripts . No terminal em que você definiu este $PATH , você pode executar test , independentemente do seu diretório de trabalho atual.

Se o script não for no seu $PATH , ou você quiser especificar explicitamente qual test você quer executar, você pode fornecer não apenas o nome do arquivo , mas um caminho relativo ou absoluto para o arquivo. Então, novamente, independentemente do seu diretório de trabalho atual, você sempre pode executar o script fornecendo o caminho completo: /home/Bill/scripts/test .

Você também pode executar o script fornecendo um caminho relativo; para alguns exemplos, em que o prompt indica seu diretório de trabalho:

/home/Bill/scripts$ ./test
/home/Bill$ scripts/test
/home/Bill/documents$ ../scripts/test
/home/James/documents$ ../../Bill/scripts/test

O motivo pelo qual você recebeu um erro quando tentou executar

/home/Bill$ ./test

é porque não há arquivo /home/Bill/test , que é o que você está tentando executar ("o arquivo test no diretório atual . ")

Se você quiser que todos os usuários possam executar o script simplesmente com seu nome, sem fornecer um caminho absoluto ou relativo para o script, ele deve estar em $PATH de todos. Você pode fazer isso fazendo com que todos os usuários adicionem /home/Bill/scripts a seus $PATH ou colocando o script em um local que esteja no padrão $PATH para todos os usuários, como /usr/local/bin . Mas você terá que chamar seu script de algo diferente de test , porque test é um caso especial: é um comando interno do shell.

    
por 01.04.2017 / 19:58
1

Nomear um script "test" não é uma boa ideia, porque já existe um comando "test":

type test
test is a shell builtin

Além disso, a variável PATH sempre trabalha para encontrar um programa ou script. Então coloque o caminho do seu script para o PATH com

export PATH=/your/place/to/directory_of_script:$PATH

tornará seu script acessível. Mas não use nomes de shell embutidos ou nomes já existentes de programas ou scripts!

    
por 01.04.2017 / 19:40