播放命令问题错误

播放命令问题错误

我的目录中有一个 shell 脚本/bin,其中有一行:play applause.mp3。该文件applause.mp3与可执行文件位于同一目录中。

然而 play 命令给了我错误play FAIL formats: can't open input file 'applause.mp3': No such file or directory

如果我直接从目录打开该文件,则可以正常播放/bin。很明显,该.mp3文件需要驻留在/bin目录之外的其他位置。 bash 去哪里寻找文件?

答案1

Bash 查找要在PATH环境变量指定的目录中执行的命令。

但是,在您的场景中,bash 已经完成了它的工作并运行了play命令。applause.mp3作为参数传递。这完全取决于play命令如何解释它。

在命令采用文件名参数的常见情况下,它将解析从当前目录开始的路径(这就是为什么当您在/bin调用脚本之前将目录更改为时它对您有用)。

/为了避免出现问题,您应该在参数中使用绝对路径(以 开头)。

答案2

程序不会在可执行文件所在的目录中查找用户数据文件。他们有时会在同一目录中查找配置文件或静态数据文件(但这并不常见)。但用户数据和安装的程序几乎不会位于同一目录中——程序通常位于不允许用户写入的系统目录中,而用户的文件通常位于其主目录下。

当您将文件名传递给程序时,它会被解释为当前工作目录。每个进程都有一个当前工作目录,它是进程环境的一部分,与特定程序无关。通常从主目录启动,并且可以使用 shell 命令cd转到另一个目录。从 shell 启动的任何程序都会继承 shell 的当前目录。

当您运行时play applause.mp3,它将查找applause.mp3当前目录中调用的文件。可执行文件所在的目录play无关紧要。

如果您想使用无论当前目录是什么都有效的文件名,请传递一个绝对文件名(以 a 开头/)。在 shell 脚本或命令行中,您可以~在开头使用缩写来引用您的主目录。例如,在位于主目录的子目录中的文件上play ~/music/applause.mp3运行。playapplause.mp3music

1他们可以,但他们几乎不这样做。

相关内容