作者DarkKiller (System hacked)
看板Linux
标题Re: [问题] bash 与 ./ 执行 script 差异
时间Sat Oct 16 23:29:45 2021
※ 引述《scitamehtam (scitamehtam)》之铭言:
: 想请问我写了一个 shell script
: 然後用 bash 去执行
: 跟用 ./ 去执行
: 在系统上是否有差异呢?
: 谢谢!
推文有人提到 shebang 了,这边在等 D2R 顺便加减赚一下 P 币...
首先是 bash ooxx.sh 的方式,这是强制用 bash 跑,第一行的 #!/bin/bash 或是
#!/bin/sh 会被当成注解,里面剩下的行数会当作 bash 指令来跑。
举例来说,弄一个 test.sh,里面加上 bash -x (把执行的指令列出来):
gslin@home [/tmp] [23:06/W7] cat test.sh
#!/bin/bash -x
echo $0
用 bash test.sh 跑会出现:
gslin@home [/tmp] [23:06/W7] bash test.sh
test.sh
但你直接跑他则会吃 #!/bin/bash -x 这边的参数:
gslin@home [/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 跑的话,可以塞的参数就大多了。
--
Resistance is futile.
https://blog.gslin.org/ & <
[email protected]>
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.34.121.114 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Linux/M.1634398189.A.1FE.html
1F:推 holishing: 其他就虽然这边是 Linux 板,但建议 bash, zsh 之类的 10/17 11:46
2F:→ holishing: shebang 还是写成 #!/usr/bin/env bash 之类的更通用 10/17 11:47
3F:推 OSDBNetwork: 还有一个小区别就是: bash file的话, 10/17 12:52
4F:→ OSDBNetwork: 不需要chomd +x file, 就能执行. 10/17 12:52
5F:推 hms5232: 感谢推文和PO文的两位 以前还真的没特别想到底有什麽差别 10/17 17:15
6F:推 scitamehtam: 谢谢大家讨论与分享~ 10/17 20:31
7F:推 Adama: python也是写#!/usr/bin/env python来套用venv里的直译器 10/17 20:58
8F:→ EdwardGJLee: 谢谢顾及 OpenBSD(bash 在 /usr/local/bin),不过, 10/17 22:16
9F:→ EdwardGJLee: 只是举例说明,是还好。 10/17 22:16
11F:→ OSDBNetwork: 抱歉, 上面那个网址是跟source才有关. 10/17 22:30
12F:→ EdwardGJLee: 在 bash 而言,source 和 ./ 是一样的。其他的 shell 10/17 23:01
13F:→ EdwardGJLee: 要看是怎麽 implement。POSXI 并没严格限制。 10/17 23:02
14F:→ EdwardGJLee: 不是 ./ 是指 . 。 10/17 23:07