Re: [问题] bash 与 ./ 执行 script 差异

楼主: DarkKiller (System hacked)   2021-10-16 23:29:45
※ 引述《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 跑的话,可以塞的参数就大多了。
作者: holishing   2021-10-17 11:46:00
其他就虽然这边是 Linux 板,但建议 bash, zsh 之类的shebang 还是写成 #!/usr/bin/env bash 之类的更通用
作者: OSDBNetwork (路人甲)   2021-10-17 12:52:00
还有一个小区别就是: bash file的话,不需要chomd +x file, 就能执行.
作者: hms5232 (未)   2021-10-17 17:15:00
感谢推文和PO文的两位 以前还真的没特别想到底有什么差别
作者: scitamehtam (scitamehtam)   2021-10-17 20:31:00
谢谢大家讨论与分享~
作者: Adama (So Say We All.)   2021-10-17 20:58:00
python也是写#!/usr/bin/env python来套用venv里的直译器
作者: EdwardGJLee (LGJ)   2021-10-17 22:16:00
谢谢顾及 OpenBSD(bash 在 /usr/local/bin),不过,只是举例说明,是还好。
作者: OSDBNetwork (路人甲)   2021-10-17 22:21:00
还有一个大区别, 鸟哥有讲: http://goo.gl/eQzWM抱歉, 上面那个网址是跟source才有关.
作者: EdwardGJLee (LGJ)   2021-10-17 23:01:00
在 bash 而言,source 和 ./ 是一样的。其他的 shell要看是怎么 implement。POSXI 并没严格限制。不是 ./ 是指 . 。

Links booklink

Contact Us: admin [ a t ] ucptt.com