Como executar um arquivo executável de um diretório diferente sem cd ou modificar o PATH?

Como executar um arquivo executável de um diretório diferente sem cd ou modificar o PATH?

Existem variações semelhantes ao que desejo perguntar, mas não consegui encontrar a pergunta exata, então farei aqui.

Digamos que eu tenha um .carquivo compilado resultando no executável exlocalizado como /mnt/f/C_F/ex. Posso muito bem executá-lo de dentro /mnt/f/C_F, ./exmas e se eu quiser fazer isso, /mnt/fdigamos (ou qualquer diretório). Não quero adicionar /mnt/f/C_F/PATH para isso.

Não consegui encontrar uma solução e suponho que não seja possível fazê-lo. Por favor, confirme isso.

Responder1

Use um caminho absoluto para esse arquivo.

/mnt/f/C_F/ex

Isso sempre deve funcionar, independentemente do seu diretório de trabalho atual. Geralmente, você provavelmente deve preferir caminhos absolutos nos scripts por esse motivo (embora haja exceções importantes).

Responder2

Você sempre pode usar o caminho relativo ou completo para o seu executável

Quando você estiver em /mnt/f, você pode executar:

C_F/ex
# or
/mnt/f/C_F/ex

Responder3

Qualquercaminho1 para o arquivo executável que contém pelo menos uma /obra.A presença de um /caractere no nome de um comando informa ao shell que você está solicitando a execução de um arquivo específico e que está especificando o local específico onde esse arquivo pode ser encontrado. Isso faz parte da sintaxe que o shell espera; na maioria dos outros contextos, é aceitável que os caminhos (relativos) não contenham /caracteres.

Para um executável que não está no diretório atual,esse é qualquer caminho para isso. Não há como escrever o caminho de um arquivo em outro diretório sem usar pelo menos um arquivo /. Isso torna a execução de arquivos em outros diretórios o caso mais simples, embora seja menos familiar.

  • Caminhos absolutos--como/mnt/f/C_F/ex--começar com /.

  • Caminhos relativospara um arquivo em outro diretório--C_F/exquando você está no /mnt/fdiretório - sempre contém um /, mesmo que não esteja no início. Um caminho relativo sem a /é apenas um nome de arquivo, identificando um arquivo no diretório atual. (O inverso não é verdade. Um caminho relativo pode conter uma /referência ainda a um arquivo no diretório atual; veja abaixo.)

    Observe que os caminhos relativos ainda devem se referir ao arquivo que você deseja para que funcionem, e se um caminho relativo se refere ou não ao arquivo que você desejadepende de qual diretório você está atualmente, já que são resolvidos em relação ao diretório atual.

Para um executável queéno diretório atual, o caminho relativo mais curto geralmente não funciona, porque não contém um arquivo /. Assim, este é o caso mais complicado, embora seja mais familiar. Quando você está no diretório onde um executável exestá localizado, você não pode simplesmente executar ex, mesmo que exseja um caminho relativo perfeitamente bom para esse executável.

A razão pela qual isso não funciona é que um nome de comando que não contém a /não é tratado como um caminho relativo ou como qualquer caminho. Em vez de,ele é tratado como um nome de arquivo e pesquisadonos diretórios listados em $PATH. 2

É por isso que você usa ./exquando está no mesmo diretório que ex.Cada diretório contém uma .entrada que se refere ao próprio diretório. Essefornece uma maneirapara escrever um caminho relativo que identifica o mesmo arquivo, exmas contém um /e, portanto, pode ser usado como um nome de comando que o shell trata como um caminho.

Um ./prefixo, portanto, não é uma sintaxe especial, mas simplesmente a segunda maneira mais simples de escrever um caminho relativo para um arquivo no diretório atual, e a maneira mais simples de fazer isso naqueles que contêm um arquivo /.


1 Nesta resposta, uso “caminho” para significar “nome do caminho”. Este é o uso mais comum de “caminho”, mas não o único. “Caminho”, como uso o termo aqui, não deve ser confundido com ocaminho de pesquisa executável, que é a coleção de diretórios cujos caminhos são listados, separados por :caracteres,na $PATHvariável de ambiente.

2 Nomes de comandos que não contêm a /também podem ser resolvidos como comandos não externos, como shell internos e funções de shell.

informação relacionada