技术解析

sh xx.sh 和 ./xx.sh 有什么区别
0
2021-06-29 07:39:11
idczone
接触 Linux 时间不长,上面这两种方式都能执行 xx.sh 脚本,但是有什么区别呢?
还有 node 也可以这样 node xx.js 和 node ./xx.js
接触的时间也不长,个人理解,望抛砖引玉:
sh xx.sh 是调用 sh 这个 shell,根据 xx.sh 的内容执行。
./xx.sh 需要首先确定 xx.sh 拥有执行权限(--x ),shell 会根据 xx.sh 的头几行使用相应的 shell 运行
node xx.js 和 node ./xx.js 区别是前者根据$PATH 寻找 xx.js 的位置,后者是直接在当前位置( pwd )寻找 xx.js 。

补充 ,sh 和 bash 还是有区别的,具体来说 /bin/sh 相当于 /bin/bash --posix

我以为 sh bash zsh 等分别是不同的 shell,有些许区别…

一般的 linux 上 sh 都是软链接到 bash 的,但是加了 --posix 参数

一个手动指定了解释器,一个可以在文件头指定?

node xx.js 和 node ./xx.js 没区别,都是在 当前目录找。。。 前者省略了 ./ 而已

区别之一,后者.sh 要有 x 权限,前者可有可无

是的,我弄错了,xx.js 就是传递给 node 的一个参数而已,具体怎么用应该是看 node 了

sh 是指定了 shell 来运行脚本 ./就只会用当前 shell 来运行

1 楼解释很到位的

/bin/sh -- > 执行一个脚本文件
./xxx 表示一个可执行脚本, 首先它要有可执行权限,而一般而言合格的脚本头部都会有 来标识该执行文件的解释器, 可以是 python 可以是 shell, 然而也不是必须的, 当都没有的情况会调用当前 shell

虽然没什么关系,第一行写成 `, 然后./xxx 试试?

回复不支持 markdown ?忽略``

不是的, ./会用文件 shebang 指定的 shell 来运行

https://zh.wikipedia.org/zh-hans/Shebang

http://www.cnblogs.com/pcat/p/5467188.html

sh 命令的话,文件里不用指定解释器就可运行。就是.sh 的第一行那个东西。./需要这一行

大家都解答得差不多了。没事,我就打个酱油

如果是直接 ./ 执行的话,也不需要指定 shebang。我一直都是写完 shell 脚本,不写 shebang,加一个+x,直接运行。不过可能不是一个好的习惯吧

并不需要,会使用用户默认 shell 执行。。
没错,如果用户默认 shell 和你编写的用的不一样的话(比如 bash vs zsh )就有机会炸掉

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服