根据标题,我想要一个.sh文件,我可以将其放入目录然后:
我的想法是,当我开发时,我可以快速运行此bash文件,并查看我正在处理的任何html / css / javascript网站的当前版本。我的问题是,如果你在bash文件中运行命令,它不会在当前工作目录中运行,而是在根目录中运行(据我所知)。因此,如果我只在我的文件中写http-server
,它将运行不在当前目录中但在./
中的服务器。
要解决此问题,我想首先cd到目录,然后运行脚本。 current_dir=$(pwd)
会给我一些接近当前目录的东西,但是我不能直接把它放到cd命令中,因为它(1)没有引号,所以目录名中的空格会使它不起作用,(2)它以/C/
而不是/C:/
开头。谁能告诉我如何解决这个问题?
我目前的代码如下所示。
curr_dir=$(pwd)
cd $curr_dir
http-server
start chrome localhost/XXX
并且,如上所述,http-server命令的运行结果在错误的地方运行:
Starting up http-server, serving ./
Available on:
http://192.168.56.1:8081
http://192.168.1.21:8081
http://127.0.0.1:8081
Hit CTRL-C to stop the server
e:对于后来发生这种情况的人来说,这实际上并不是一个问题 - 请参阅接受的答案。我有另一个错字。
答案 0 :(得分:2)
没有;您运行的命令始终在当前目录中运行。否则,如果您的假设是正确的,例如, ls
将始终显示根目录中的文件。
如果要运行位于不同目录中的命令,则需要
../relative/path/to/command
或
/absolute/path/to/command
这些都不会更改shell的当前目录。您创建的进程的当前工作目录将保留您运行此命令时所在的目录。 (例如,即使您在后台运行它,然后更改为交互式shell中的其他目录。)
如果您希望命令在脚本所在的目录中运行,那么这样的事情偶尔会有用。
cd "$(dirname "$0")"
但是,大多数情况下,您希望并且需要在当前目录中运行命令。
( 情况下,您希望脚本在固定位置处理数据文件,但这些是极少数例外。在您遇到这种情况之前,请考虑使用{{1在shell脚本中。)
如果cd
上某处有http-server
命令,则PATH
只会运行该命令。您通常不拥有http-server
上的当前目录,但要在当前目录而不是PATH
的任何位置运行二进制文件,您可以这样说:
PATH