AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 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

如何将命令应用于带有空格的 $PATH 文件?

  • 772

我的 $PATH 有 /a/path/with 空格/in/it

我只需键入名称即可运行位于所述路径上的可执行文件。

但是当我尝试对它们应用命令时,它们会因找不到错误而失败。

例如。我在路径上有一个 python 脚本,称为 prog.py

如果我只输入 prog.py,我的 shell 会尝试运行它。所以这条路是有效的。但:

$ 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)

如果我 cd 到 prog.py 的实际位置,然后尝试相同的命令,它们会按预期运行:

$ file ./prog.py

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

$ python3 ./prog.py

True

为什么会这样?我该怎么做才能从我希望的任何地方执行这些命令(尤其是 python3)?

python path
  • 3 3 个回答
  • 1226 Views

3 个回答

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

    我相信问题不在于空间。你试过没有空格的路径吗?

    关键是$PATH寻找可执行文件的路径,而不是随机类型的文件。

    例如,如果您有一个可执行文件抱怨缺少库,您必须使用$LD_LIBRARY_PATH它来告诉它文件在哪里。添加文件的位置$PATH将无济于事。另一方面,如果您在编译时遇到缺少的库,则需要另一个变量(即$LIBRARY_PATH)。

    所以最好的解决方案是在你的 python 脚本中添加适当的 shebangs 并将它们放在$PATH. 如果您希望能够在任何需要使用$PYTHONPATH.

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

    这与包含空格的目录名称无关。当您运行python3 prog.pyorfile prog.py时,您指定的是相对路径,标准 Unix 语义意味着它将从当前工作目录打开。没有明智的方法可以改变这一点。

    但是,如果您使脚本可执行 ( chmod +x /path/to/prog.py) 并确保它#!在顶部有正确的行(可能#! /usr/bin/python3),那么您将能够通过说prog.py(not python3 prog.py) 从任何地方执行它。

    顺便说一句,程序$PATH不包含指定其实现的扩展通常是个好主意,因为这确实违反了分层;我建议只调用它prog(酌情替换)而不是prog.py.

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

    这是您引用prog.py文件的方式

    python3 prog.py说“在我当前的工作目录中有一个名为 prog.py 的文件”

    您的第二个示例-您使用的位置./prog.py-您明确说明“在当前目录中,您将找到一个名为 prog.py 的程序”

    您的 $PATH 仅搜索命令 - 而不是命令的参数。

    如果您想调用 python 二进制文件(或任何其他二进制文件,如catorsed或lessor ...),那么它应该在您的 $PATH 中 - 您似乎拥有。要引用任何其他文件,您必须始终提供该文件的完整相对路径或完整绝对路径。

    • 0

相关问题

  • 什么情况下路径中最先找到的可执行文件不会被使用

  • python2 和 OpenSSL 不能在 Kali 上一起玩 - 如何解决?

  • 从文件中删除间隙模式[关闭]

  • 列表理解中集合的 Python add() 函数

  • 如何在 unix 中获取应用程序的默认版本

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    JSON数组使用jq来bash变量

    • 4 个回答
  • Marko Smith

    日期可以为 GMT 时区格式化当前时间吗?[复制]

    • 2 个回答
  • Marko Smith

    bash + 通过 bash 脚本从文件中读取变量和值

    • 4 个回答
  • Marko Smith

    如何复制目录并在同一命令中重命名它?

    • 4 个回答
  • Marko Smith

    ssh 连接。X11 连接因身份验证错误而被拒绝

    • 3 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Marko Smith

    systemctl 命令在 RHEL 6 中不起作用

    • 3 个回答
  • Marko Smith

    rsync 端口 22 和 873 使用

    • 2 个回答
  • Marko Smith

    以 100% 的利用率捕捉 /dev/loop -- 没有可用空间

    • 1 个回答
  • Marko Smith

    jq 打印子对象中所有的键和值

    • 2 个回答
  • Martin Hope
    EHerman JSON数组使用jq来bash变量 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux 日期可以为 GMT 时区格式化当前时间吗?[复制] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC 如何复制目录并在同一命令中重命名它? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve “root”用户的文件权限如何工作? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey 如何下载软件包而不是使用 apt-get 命令安装它? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao 为什么目录 /home、/usr、/var 等都具有相同的 inode 编号 (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg —list-keys 命令在将私钥导入全新安装后输出 uid [未知] 2017-11-26 18:26:02 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve