为什么在使用telnet vs ssh时,AIX上的bash调用有所不同

我正在使用AIX 5.3服务器,其中设置了一个.bashrc文件来回显“执行bashrc”。 当我使用sshlogin到服务器并运行:

bash -c ls 

我得到:

 Executing bashrc . .. etc.... 

但是,当我用同一个用户logintelnet并运行相同的命令,我得到:

 . .. etc.... 

显然,在telnet的情况下,没有调用.bashrc。 就在我可以告诉这是正确的行为,因为在这两种情况下shell都是非交互式的(用-c调用它)。 但是,ssh情况似乎是以交互方式调用shell。 它似乎没有调用.profile,所以它不是创build一个loginshell。 在这两种情况下,我看不出有什么明显的不同。

什么可能导致bash行为的差异?

请检查以确定您所在的loginshell没有别名或不同的PATH具体取决于您是通过ssh还是telnet 。 比较这种方式:

 type -a bash 

可能有一些条件代码中的一个:

  • /etc/profile
  • /.bash_profile
  • ~/.bash_login
  • ~/.profile
  • ~/.bashrc

根据您是通过ssh还是telnetlogin, PATH设置不同或创build别名。 PATH可以指向使用不同选项编译的不同版本的Bash。 别名可以是alias bash='bash -i'

如果您按照Nikolaidis的build议echo $SHELL ,那么只会显示/etc/passwd设置的内容。 使用ps可能更可靠。 如果由于某种原因,你得到的不是Bash的shell,你需要检查它的启动文件和环境,看是否PATH或别名不同。 但是,通常情况下,交互式shell不应该影响显式调用bash -c工作方式。

你对此是正确的:

就在我可以告诉这是正确的行为,因为在这两种情况下shell都是非交互式的(用-c调用它)。

从Bash手册页 ,这是“正常的”行为 – bash试图决定是否从sshd首先运行它:

由远程shell守护进程调用

Bash试图确定它的运行时间是什么时候它的标准input连接到一个networking连接上,就像远程shell守护进程(通常是rshd)或者安全shell守护进程sshd一样。 如果Bash确定它正在以这种方式运行,它将读取并执行〜/ .bashrc中的命令,如果该文件存在且可读的话。 如果调用sh,它不会这样做。 –norc选项可以用来禁止这种行为,而–rcfile选项可以用来强制读取另一个文件,但rshd通常不会用这些选项调用shell,或者允许指定它们。

在这两种情况下试试echo $ SHELL。 这是在两种情况下实际上看到它轰击。