为什么在可执行文件或脚本名称之前需要./(点-斜杠),以便在bash中运行它

问:

在bash中运行脚本时,我必须在开头写 ./

$ ./manage.py syncdb

如果不这样做,我就会收到一条错误消息:

$ manage.py syncdb
-bash: manage.py: command not found

这是什么原因呢? 我认为. 是当前文件夹的别名,因此这两个调用应该是等效的。

我也不明白为什么在运行应用程序时我不需要 ./,例如:

user:/home/user$ cd /usr/bin
user:/usr/bin$ git

(没有 ./ 也能运行)

答:

因为在类 Unix 系统上,当前目录通常不在 $PATH 中。

当你输入一个命令时,shell 会查找由 PATH 变量指定的目录列表。

可以用以下命令查看环境变量 $PATH

echo $PATH

你将看到一些用冒号分隔的路径。正如你将看到的当前路径 . 通常不在 $PATH 中。因此,如果你的命令在当前目录中,Bash 将无法找到它。

加上 ./ 的作用相当于是“在当前目录中查找脚本或可执行文件,而不是从 $PATH 中指定的所有目录中查找”。

或者你可以通过以下命令进行更改

PATH=$PATH:.

这行代码将当前目录添加到 $PATH 中,以便你可以这样:

manage.py syncdb

但是不建议这样做,因为它有安全问题,而且你可能会执行奇怪的行为,正如 . 根据你所在的目录而不同。

更多细节描述请查看官方文档命令搜索和执行


参考:

  • stackoverflow question 6331075

PS:

本文首发于公众号: 程序熵, 更多精彩文章请点击关注code-shang

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误提示意思是“-bash: ./: 是一个目录”。它通常出现在你试图运行一个文件时,但实际上你提供的是一个目录。可能是你在命令后面多敲了一个,导致命令被解释成目录而不是文件。你可以检查一下命令的语法,确保提供的是一个可执行文件路径,而不是目录路径。非常感谢您的提问和补充信息。 这个错误提示意思是在命令行输入的"./"是一个目录,而不是可执行文件。在绝大多数情况下,这是由于输入了错误的命令或者路径导致的。确保输入的命令和路径都是正确的,可以通过检查命令行语法和文件路径来解决这个问题。 另外,您还可以检查一下当前目录是否有一个与输入的命令同名的目录。如果存在同名的目录,则系统将无法区分你想要运行的是目录还是文件,从而导致错误提示。 如果您需要更多的帮助,请提供更多信息,例如您要运行的命令和所在的操作系统等。这个错误提示是在Unix或Linux操作系统出现的,意思是你在尝试执行当前目录的命令,但是当前目录被识别为一个目录而不是可执行文件。 可能的原因是你输入了一个不完整的命令或者拼写错误,或者你试图执行一个不存在或无法执行文件。解决方法是检查你输入的命令或文件名是否正确,并确保你要执行文件是可执行的。如果你想执行当前目录下的文件,你需要指定该文件的完整路径。这个错误提示意味着您试图在一个目录上执行一个需要文件名的命令。在终端,"." 表示当前目录,"./" 表示当前目录下的文件。因此,当您输入 "./" 后面没有指定文件名时,终端会显示这个错误。 要解决这个问题,您需要在 "./" 后面输入一个文件名,或者使用正确的命令来处理目录。这个错误信息 "-bash: ./: is a directory" 表示你试图执行一个目录而不是可执行文件。在命令行,"./"通常用来指定当前目录,如果你在当前目录下执行了一个不是可执行文件的命令,就会出现这个错误。可能的解决方法是检查你输入的命令是否正确或者检查当前目录下是否存在可执行文件。这个错误信息意思是“-bash: ./: 是一个目录”,通常出现在你在终端输入类似于"./file"这样的命令时。这通常意味着你输入的命令"./"表示当前目录,但"./"后面应该跟一个文件名或可执行程序,而不是一个目录名。你需要检查你输入的命令是否有误,或者确认你想要执行文件或程序是否存在于当前目录。这个错误信息通常是在尝试执行一个目录时出现的。在命令行,"./"代表当前目录。因此,如果您尝试运行一个目录而不是文件,就会看到这个错误信息。解决这个问题的方法是确保您在运行执行文件而不是目录,或者在运行命令之前使用"cd"命令更改到正确的目录。这个错误信息是在Linux命令行出现的,意思是你试图执行一个名为“./”(一个目录)的命令,但是它不是一个可执行文件,而是一个目录。请检查你的命令是否正确,并确保你要执行的命令是一个可执行文件,而不是一个目录。这个错误信息的意思是"-bash: ./: 是一个目录"。它通常出现在你在终端使用命令时,尝试进入一个目录,但使用了错误的语法或参数。 具体来说,"./"是表示当前目录的路径,如果你把它当成命令输入,系统会认为你要运行当前目录下的某个文件,而不是进入当前目录。因此,系统会提示这个错误信息,告诉你"./"是一个目录,不能作为命令来运行。 抱歉,我不明白您的意思。这个错误信息是由于在命令行输入了一个非法的命令。通常情况下,这个错误是由于使用了 `./` 命令来执行一个目录而不是一个可执行文件。这个命令的意思是在当前目录下执行一个可执行文件,而不是一个目录。因此,你需要输入一个可执行文件的路径和文件名,而不是一个目录名,来解决这个问题。这个错误信息通常出现在你试图执行一个目录(directory)而不是一个可执行文件(executable file)的时候。在终端输入"./"是指要执行当前目录,但是由于当前目录并不是一个可执行文件,所以就会出现这个错误信息:"-bash: ./: is a directory"。 如果你想要执行某个可执行文件,可以在"./"后面输入可执行文件名称,并且确保该文件具有可执行权限。如果你只是想要查看当前目录下的文件列表,可以输入"ls"命令。 这是一个目录。 这是一个目录,不是一个可执行文件。 这是一个目录,但不能执行。 我不是一个程序,我无法回答这个问题。 这是一个文件夹,不是一个可执行文件。这个错误信息是在命令行使用了"./",但是它所指向的是一个目录而非文件。通常这种错误信息出现在尝试运行一个脚本或程序时,命令行找不到对应的文件。你可以检查命令行输入的路径是否正确,或者在命令行进入该目录后再执行相应的命令。这个错误提示通常出现在使用命令时,输入了一个目录而不是一个可执行文件的情况下。 例如,如果您输入了 "./",它代表当前目录,而不是一个可执行文件。因此,终端会报告错误,指出“./”是一个目录,无法执行。 为了解决这个问题,您需要输入一个可执行文件名称,或者使用正确的路径来指定您想要运行文件的位置。 我不明白你的意思。这个错误信息的意思是你尝试运行一个目录,而不是一个可执行文件。在终端输入命令时,确保你输入的是一个可执行文件的路径,而不是一个目录的路径。如果你确信该目录包含一个可执行文件,请检查该文件名称和权限是否正确,并在命令指定该文件的路径。这个错误信息通常表示您正在尝试运行一个目录,而不是一个可执行文件。在终端执行一个目录是无效的操作,因为目录不是可执行文件。您需要进入目录并找到其的可执行文件才能运行它。您可以使用ls命令列出目录文件和子目录,然后使用cd命令进入子目录。如果您想要运行一个可执行文件,您需要确保已经为该文件设置了适当的权限。您可以使用chmod命令更改文件的权限。这个错误提示意味着您正在尝试执行一个目录,而不是可执行文件。在终端使用"./"命令时,需要指定可执行文件名称,而不是目录的名称。请确认您输入的命令是否正确,并确保您正在指定可执行文件名称。如果问题仍然存在,请检查目录是否存在可执行文件,并且该文件是否具有执行权限。这个错误提示是因为你尝试执行的不是一个可执行文件,而是一个目录。在Linux和类Unix操作系统执行一个文件需要给它执行权限,并且它必须是可执行文件格式,如二进制文件或shell脚本等。如果你想执行一个目录,你需要进入该目录并运行该目录的可执行文件脚本。这个错误信息通常出现在你试图执行一个目录(directory)的时候。在终端输入 `./` 通常是为了执行当前目录下的一个文件,但是如果你输入的是一个目录的路径而不是一个文件的路径,系统会返回 `-bash:./:isadirectory` 的错误信息。 解决方法是确认你要执行的是一个文件而不是一个目录,或者在执行前先进入到相应的目录。例如,如果你要执行当前目录下的 `script.sh` 文件,应该输入 `./script.sh` 而不是 `./`。如果你要进入到目录 `folder` ,应该先输入 `cd folder`,然后再执行相应的命令。这个错误信息 "-bash:./:isadirectory" 意思是你试图运行一个目录,而不是一个可执行文件。在命令行,"./" 表示当前目录,如果你在当前目录下没有可执行文件,就会出现这个错误。你需要进入到包含可执行文件的目录,然后再运行它。可以使用命令 "cd" 切换到正确的目录,然后使用 "./可执行文件名" 命令来运行文件。这个错误信息通常出现在你试图在命令行运行一个目录(directory)而不是可执行文件。在终端输入"./"通常是为了执行当前目录下的某个可执行文件,但如果你输入的是一个目录而不是可执行文件,就会出现"-bash:./:is a directory"这个错误信息。要解决这个问题,你需要确保你输入的是一个可执行文件的路径而不是一个目录的路径。你可以使用"ls"命令来查看当前目录下有哪些文件和目录,并确认你要运行文件的路径。这个错误提示意味着你在尝试执行一个目录,而不是一个可执行文件。在终端执行命令时,确保你提供的是可执行文件的路径,而不是目录的路径。如果你想查看目录的内容,可以使用"ls"命令。这个错误信息的意思是你在尝试运行一个目录(文件夹),而不是可执行文件。在终端输入"./",后面跟着的应该是一个可执行文件的路径,而不是一个目录的路径。如果你想查看目录下的文件列表,可以使用"ls"命令。这个错误信息的意思是你试图执行一个目录,而不是一个可执行文件。在终端执行命令时,确保你正在运行执行文件,而不是目录。如果你想进入该目录,请使用cd命令。 对不起,我不能理解这个问题。这个错误提示意思是你在运行一个目录,而不是一个可执行文件。在终端输入"./"后跟上可执行文件名来运行文件,而不是目录名。如果你想查看该目录的内容,可以使用"ls"命令来列出该目录下的文件和子目录。这个错误提示说明你尝试执行的不是一个可执行文件,而是一个目录。在命令行,使用"./"来执行当前目录下的可执行文件,如果你使用"./"执行一个目录,就会出现"-bash:./:is a directory"的错误提示。请检查你要执行文件是否存在,是否已经给该文件添加了执行权限。这个错误信息 "-bash:./:isadirectory" 意味着你尝试执行一个目录,而不是一个可执行文件。在命令行,"./" 表示当前目录,因此如果你尝试运行一个目录,就会出现这个错误。你需要进入目录并找到其的可执行文件,然后使用该文件的路径来运行它。这个错误信息通常出现在你试图运行一个目录而不是一个可执行文件时。请检查你输入的命令是否正确,并确保你要运行文件是可执行文件而不是一个目录。你可以使用 "ls" 命令查看目录文件列表,确认你要运行文件名是否正确,并使用 "./文件名" 的形式来运行执行文件。 不,这不是一个有效的命令。这个错误提示说明你正在尝试执行一个目录,而不是一个可执行文件。在命令行,使用"./"表示当前目录,如果你输入的命令后面跟着"./",那么系统就会在当前目录查找这个文件执行它。如果你输入的路径是一个目录而不是文件,系统就会报错并提示"-bash:./:is a directory"。要解决这个问题,你需要确保你要执行的是一个可执行文件,而不是一个目录。这个错误提示意味着您试图运行一个目录,而不是一个可执行文件。在命令行使用"./"表示运行当前目录的可执行文件,但如果您使用"./"运行一个目录,则会出现这个错误。请确认您要运行的是一个可执行文件,而不是一个目录。 不,这不是一个有效的命令。这个错误信息通常出现在你试图运行一个脚本文件(或可执行文件),但是在文件名前加上了"./",例如: ``` ./myscript.sh ``` 这个错误的原因可能是你正在尝试运行一个目录(文件夹),而不是可执行文件。要解决这个问题,请检查你当前的工作目录并确保你正在运行的是一个可执行文件。如果这个文件不是可执行的,你可以使用chmod命令来给它添加可执行权限,例如: ``` chmod +x myscript.sh ``` 然后你就可以使用"./"来运行这个脚本了。 ### 回答2: 这个错误信息 "-bash: ./: is a directory",通常是在使用终端命令时出现的。它的意思是“./”是一个目录,无法直接执行。那么为什么会出现这个错误,该怎么解决呢? 首先,"./"是Linux系统下的相对路径,它表示当前目录。一般来说,我们在命令行执行某个程序时,需要指定它的绝对路径或相对路径,例如: $ /usr/bin/ls # 执行ls命令,绝对路径是/usr/bin/ls $ ./test.sh # 执行test.sh脚本,当前目录下有test.sh文件 但是,如果我们误把一个目录当成了文件执行,就会出现上述错误信息。因为目录是不能被执行的,它只能被打开并浏览其文件。 解决这个问题,可以通过以下几个步骤: 1. 确认输入的命令或路径是否正确,没有打错字母或漏掉空格。 2. 确认当前目录下是否存在要执行文件,它的权限是否正确,是否有执行权限。 3. 如果要执行文件位于其他目录需要输入正确的相对路径或绝对路径。 4. 如果要执行文件脚本或可执行文件需要文件首行添加相应的Shebang行,例如#!/bin/bash。 总之,要避免 "-bash: ./: is a directory" 错误,我们需要仔细检查命令或路径的正确性,并了解不同类型文件执行方式和权限问题。 ### 回答3: 在Linux或Unix系统,当您尝试运行当前目录下的脚本或可执行文件时,可能会看到以下错误信息:“-bash: ./: is a directory”。这个错误消息告诉您命令行解释器bash不能运行当前目录,因为“./”是一个目录。 “./”是指当前目录。当您键入 ./command.sh 或 ./program.exe 时,bash会查找当前目录来查找可执行二进制文件。如果您尝试在当前目录运行另一个目录,bash会受到拒绝。 要解决此错误,您需要明确指定可执行文件的完整路径,并且权限正确。例如,如果您要运行名为“program.sh”的脚本,并且它位于/home/user/scripts/目录下,则应运行以下命令: /home/user/scripts/program.sh 如果文件的权限不足以允许您运行它,则可以使用 chmod 命令增加权限。例如,以下命令将“program.sh”设置为可读、可写和可执行: chmod u+rwx program.sh 最后,您可能想考虑添加路径到当前目录以方便访问可执行文件。您可以使用$PATH变量来定义路径。例如,如果您将程序.sh路径添加到$PATH变量,则可以从任何位置运行脚本,而不需要输入完整路径: export PATH=$PATH:/home/user/scripts 通过这种方式,您可以轻松地运行当前目录的可执行文件脚本,并且不用担心出现“-bash: ./: is a directory” 错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值