在Bash或Windows(或任何其他shell)中,是否需要执行
./script/generate scaffold foo name:string
而不是仅使用
script/generate ...
?我有时会看到第一种形式,但第二种形式总是适用于我,在Mac OS X或Ubuntu上,即使PATH不包含.
(当前目录)
第二种形式总是可行,所以第一种形式真的不需要吗?我认为对于可执行文件,我们有时会使用./a.out
来运行它...但似乎script/generate
可能不需要前面的./
?
答案 0 :(得分:3)
他们的意思完全相同。
从当前目录开始,选择一个名为“script”的子目录,并在其中选择一个名为“generate”的可执行文件并运行它。
不同之处在于,使用./
显式指定当前目录,没有它,它是隐式的。
答案 1 :(得分:1)
POSIX shell中有两种调用语法:
PATH
enviornment变量中搜索来运行程序 - 当程序名称没有斜杠(/
)时使用此程序。/
开头的路径)或相对路径(以任何其他符号开头的路径)。当程序的名称包含至少一个/
时选择此项 - 因此它是路径,而不仅仅是文件名。在您的情况下,通过指定程序的路径,使用变体#2执行调用 - script/generate
或./script/generate
的两种方式。 ./
是当前目录的别名,在某些情况下,它必须存在(例如,使用cd
命令时,您不能仅在没有参数的情况下说cd
并期望更改进入当前目录 - cd
保留不带参数的调用以更改为$HOME
目录 - 但如果要进入当前目录,则可以调用cd ./
,但在这种情况下不需要调用
答案 2 :(得分:0)
您可能需要查看4 Ways of Executing a Shell Script和Shell Script Execution Guidlines。两种风格之间的主要区别是:
script/generate ...
如果脚本的父目录不在您当前的PATH环境中,将无效。 (这肯定取决于shell的查找方法是如何实现的。可能有一些实现 - 到最后的手段 - 在你当前的工作目录中查找)。
修改强>
好吧,我已经对此做过一些研究,因为我自己似乎并不知道有什么区别。所以,这就是我所得到的:
./
(点斜杠)语法是当前工作目标的绝对路径的别名,因此 - 例如/home/peter/script
是cwd -
peter@linux:/home/peter/script$./myscript
扩展为/home/peter/script/myscript
。斜线点别名基本上为shell提供了查找可执行文件/脚本的位置的提示。
这个提示是必不可少的,这就是
的原因peter@linux:/home/peter$script/myscript
同样适用
peter@linux:/home/peter/script$myscript
不会。前者通过提供某种参考点(即script
目录)来帮助shell找到正确的可执行文件/脚本。另一方面,后者使shell有一个可能模糊的命令,因为在用户的$ PATH中可能有一个同名脚本。
所以,为了达到目的,你要求区别的两种风格基本相同 - 给shell提供了查找可执行文件/脚本的提示。然后shell可以明确地解析正确的文件,并很乐意执行它。
度过愉快的一天。
答案 3 :(得分:-1)
这些答案没有错,只是它们太长了 - 它只是关于你的路径。如果您的路径包含'。'那么任何一种方式都会起作用
这就是说,这是一个坏习惯。'出于安全原因,请在PATH中使用' ./'