Execução de programas sem precisar especificar um diretório?

2

Por que é que eu tenho que digitar /etc/init.d/apache2 (args) para executar o apache ??

Não existe uma maneira de apenas apache2 args ??

    
por user1091856 16.11.2012 / 23:57

4 respostas

9

Você normalmente não digita um comando para executar o Apache: ele inicia quando o sistema é inicializado. Os scripts em /etc/init.d iniciam serviços e são executados automaticamente no momento da inicialização, se o seu sistema estiver configurado corretamente. Com a maioria das distribuições, os serviços são ativados por padrão e serão iniciados a menos que você tenha feito algo para desativá-los.

Se você parou o Apache e deseja reiniciá-lo, /etc/init.d/apache2 start é o caminho normal - ou preferencialmente service apache2 start . Seria de pouca utilidade ter um comando mais curto, já que isso não é algo que você faria como parte do uso normal do sistema. Comandos que são destinados ao uso comum podem ser executados sem especificar seu caminho completo; esses comandos estão nos diretórios listados na variável de ambiente PATH (que o Windows imita).

    
por 17.11.2012 / 01:10
6

Você provavelmente deve estar usando o comando service para iniciá-lo.

service apache2 start

E os argumentos do apache devem estar em sua estrutura /etc/apache2 .

    
por 17.11.2012 / 00:08
4

Isso ocorre porque /etc/init.d/ não está definido em $ PATH.

It's essentially a :-separated list of directories. When you execute a command, the shell searches through each of these directories, one by one, until it finds a directory where the executable exists. ( http://www.cs.purdue.edu/homes/cs348/unix_path.html )

    
por 17.11.2012 / 00:08
3

Existem muitas maneiras de invocar um comando (script ou executável binário) que não está ao alcance de seu PATH .

Esses métodos são bons de se conhecer - mas, se você se vê fazendo mais acrobacias extravagantes apenas para executar comandos, isso indicaria um design de sistema abaixo do ideal.

Digamos que este seja seu script, chamado s , e você o coloque em /home (para torná-lo inacessível, pois /home certamente não está no seu PATH ):

echo "The first argument is: $1"
echo "The second argument is: $2"

Três maneiras de alcançá-lo, sem dar o caminho absoluto, são:

Um alias: alias salias='/home/s'

Uma função: sfunc () { /home/s $@ }

Um link: ln -s /home/s slink

Os dois primeiros, se você usá-los novamente, você colocaria em seu arquivo de inicialização do shell ( .bashrc para bash, .zshrc para zsh, etc.). Para usar o link (o terceiro caso), você teria que colocá-lo em um diretório incluído em você PATH , ou, você invocaria explicitamente, com um caminho absoluto (por exemplo, se você está no mesmo diretório, ./slink one two ).

    
por 17.11.2012 / 00:52