ログインシェル - ログインシェルを呼び出す方法

ログインシェル - ログインシェルを呼び出す方法

私はログインシェルが何であるか、ログインシェルと非ログインシェルの違いを知っています。

しかし、私を混乱させるのはそれがどのように呼ばれるかです。-パラメータ0でログインシェルを呼び出すとします。

引数0がシェル自体の名前である場合、呼び出しシェルに引数を渡すにはどうすればよいですか?

# -bash 
-bash: -bash: command not found

わかりました。

# bash --login
# echo $0
# bash

私はまだそれを見ていません-bash

SSH経由でログインしている場合にのみ公開時に表示でき-bashますecho $0。しかし、元の質問に戻って、

  1. Unix / Linuxでログインシェルを作成する方法は?
  2. ログインプロセス中にログインシェルを作成する「モノ」は何ですか?ログイン中にbashシェルを呼び出す「ログイン」プロセスの場合、パラメータ0を-bashシェルに渡すにはどうすればよいですか?

ベストアンサー1

SSHなどのプログラムは、次のコマンドを使用してシェルを起動sudoします。suexecシステムコールシリーズ。これらのシステムコールにより、呼び出しプログラムは関数を含むすべてのパラメータを指定できます。たとえば、次のようにsudoログインシェルを起動します。

$ 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

最初の呼び出しでわかるように、渡された引数の配列はexecve0bashなので、["-bash"]引数0も同じです-bash

おすすめ記事