我在客户端和服务器上都使用 Bash。通过 SSH 运行命令时:
ssh <host> 'declare'
给出 shell 变量的列表.ssh <host> 'mount'
给出安装点列表。
然而,declare
是 Bash 内置命令,而mount
是外部命令。如果服务器上存在同名的内置 shell 和外部命令,SSH 如何知道要运行哪一个?
答案1
运行ssh
您在远程用户的 shell 中提供的命令(从/etc/passwd
),如从源代码:
argv[0] = (char *) shell0;
argv[1] = "-c";
argv[2] = (char *) command;
argv[3] = NULL;
execve(shell, argv, env);
因此,在远程服务器上为您的示例执行的相应命令是:
bash -c declare
bash -c mount
它们都被传递给bash
并进行评估。内置命令在内部进行评估,并调用外部命令,就像您从本地命令行提示符中执行此操作一样。