AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 409284
Accepted
markling
markling
Asked: 2017-12-07 11:29:17 +0800 CST2017-12-07 11:29:17 +0800 CST 2017-12-07 11:29:17 +0800 CST

Como aplicar o comando ao arquivo em $ PATH com espaços?

  • 772

Meu $PATH tem /a/path/com espaços/in/it

Posso executar executáveis ​​​​que ficam no referido caminho simplesmente digitando seus nomes.

Mas quando tento aplicar comandos neles, eles falham com o erro não encontrado.

por exemplo. Eu tenho um script python no caminho, chamado prog.py

Se eu apenas digitar prog.py, meu shell tentará executá-lo. Então o caminho está funcionando. Mas:

$ python3 prog.py

python3: can't open file 'prog.py': [Errno 2] No such file or directory

$ file prog.py

prog.py: cannot open `prog.py' (No such file or directory)

Se eu cd para o local real de prog.py, tente os mesmos comandos, eles serão executados conforme o esperado:

$ file ./prog.py

./prog.py: Python script, ASCII text executable

$ python3 ./prog.py

True

Por que isso acontece? E o que posso fazer para executar esses comandos (principalmente python3) de onde eu quiser?

python path
  • 3 3 respostas
  • 1226 Views

3 respostas

  • Voted
  1. Weijun Zhou
    2017-12-07T11:53:37+08:002017-12-07T11:53:37+08:00

    Acredito que o problema não seja o espaço. Você já tentou um caminho sem um espaço?

    A questão é que $PATHsão os caminhos para procurar executáveis, não arquivos de tipo aleatório.

    Por exemplo, se você tem um executável que reclama de uma biblioteca ausente, você deve usar $LD_LIBRARY_PATHpara informar onde está o arquivo. Adicionar o local do arquivo $PATHnão ajudará. Por outro lado, se você encontrar uma biblioteca ausente em tempo de compilação, precisará de outra variável (ou seja, $LIBRARY_PATH).

    Portanto, a melhor solução seria adicionar shebangs adequados aos seus scripts python e colocá-los em algum lugar no arquivo $PATH. Se você quiser importá-los para qualquer lugar, precisará trabalhar com arquivos $PYTHONPATH.

    • 2
  2. Best Answer
    Colin Watson
    2017-12-07T11:54:51+08:002017-12-07T11:54:51+08:00

    Isso não tem nada a ver com o nome do diretório contendo espaços. Quando você executa python3 prog.pyou file prog.py, está especificando um caminho relativo, e a semântica padrão do Unix significa que ele será aberto a partir do diretório de trabalho atual. Não há uma maneira sensata de mudar isso.

    No entanto, se você tornar o script executável ( chmod +x /path/to/prog.py) e garantir que ele tenha uma linha correta #!na parte superior (provavelmente #! /usr/bin/python3), poderá executá-lo de qualquer lugar dizendo apenas prog.py(não python3 prog.py).

    A propósito, normalmente é uma boa ideia que os programas $PATHnão contenham uma extensão que especifique sua implementação, pois isso é realmente uma violação de camadas; Eu recomendo chamá-lo apenas prog(substitua conforme apropriado) em vez de prog.py.

    • 2
  3. ivanivan
    2017-12-07T11:54:35+08:002017-12-07T11:54:35+08:00

    É como você está referenciando o prog.pyarquivo

    python3 prog.pydiz "no meu diretório de trabalho atual há um arquivo chamado prog.py"

    Seu segundo exemplo - onde você usa ./prog.py- você está declarando explicitamente "no diretório atual, você encontrará um programa chamado prog.py"

    Seu $PATH é pesquisado apenas por comandos - não argumentos para comandos.

    Se você deseja chamar o binário python (ou qualquer outro binário como catou sedou lessou ...), ele deve estar em seu $ PATH - que você parece ter. Para fazer referência a qualquer outro arquivo, você sempre deve fornecer um caminho relativo completo ou um caminho absoluto completo para o arquivo.

    • 0

relate perguntas

  • Em que circunstâncias o executável encontrado primeiro no caminho não será usado

  • python2 e OpenSSL não funcionam juntos no Kali - como consertar?

  • Remova o padrão de lacuna dos arquivos [fechado]

  • Função Python add () de conjunto na compreensão da lista

  • Como obter a versão padrão de um aplicativo no unix

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve