※ 引述《scitamehtam (scitamehtam)》之铭言:
: 想请问我写了一个 shell script
: 然后用 bash 去执行
: 跟用 ./ 去执行
: 在系统上是否有差异呢?
: 谢谢!
推文有人提到 shebang 了,这边在等 D2R 顺便加减赚一下 P 币...
首先是 bash ooxx.sh 的方式,这是强制用 bash 跑,第一行的 #!/bin/bash 或是
#!/bin/sh 会被当成注解,里面剩下的行数会当作 bash 指令来跑。
举例来说,弄一个 test.sh,里面加上 bash -x (把执行的指令列出来):
[email protected] [/tmp] [23:06/W7] cat test.sh
#!/bin/bash -x
echo $0
用 bash test.sh 跑会出现:
[email protected] [/tmp] [23:06/W7] bash test.sh
test.sh
但你直接跑他则会吃 #!/bin/bash -x 这边的参数:
[email protected] [/tmp] [23:07/W7] ./test.sh
+ echo ./test.sh
./test.sh
在维基百科有说明什么是 shebang (也就是第一行的 #!):
https://zh.wikipedia.org/wiki/Shebang
https://en.wikipedia.org/wiki/Shebang_(Unix)
另外 shebang 也有一些限制,像是大多数支援 shebang 的作业系统下,#! 那行不
能超过 127 chars:
https://stackoverflow.com/questions/10813538/shebang-line-limit-in-bash-and-linux-kernel
直接在 command line 下用 bash 跑的话,可以塞的参数就大多了。