Noo*_*oob 3 linux shell bash kernel centos
我知道什么是登录 shell 以及登录 shell 和非登录 shell 之间的区别。
但令我困惑的是它是如何被调用的。据说登录 shell 是用-参数 0调用的。
我们如何将参数传递给正在调用的 shell,然后参数 0 是 shell 本身的名称?
# -bash
-bash: -bash: command not found
Run Code Online (Sandbox Code Playgroud)
好的没关系
# bash --login
# echo $0
# bash
Run Code Online (Sandbox Code Playgroud)
我仍然没有看到-bash.
只有当我通过 SSH 连接时,我才能-bash在发出echo $0. 但回到我最初的问题,
-给 bash shell?像SSH程序,sudo,su等,使用启动shell的exec系统调用的家庭。这些系统调用允许调用程序指定每个参数,包括函数。例如,sudo用于启动登录 shell:
$ strace -fe execve -o sudo.log sudo -i
root:~ $ echo $0
-bash
root:~ $ logout
$ grep bash sudo.log
19124 execve("/bin/bash", ["-bash"], [/* 31 vars */]) = 0
19140 execve("/bin/ls", ["ls", "/etc/bash_completion.d"], [/* 40 vars */]) = 0
Run Code Online (Sandbox Code Playgroud)
从第一次execve调用中可以看出,传递给的参数数组bash只是["-bash"]- 所以参数零是-bash。
| 归档时间: |
|
| 查看次数: |
4775 次 |
| 最近记录: |