Ssh X11 转发与默认 shell 混淆

Ssh X11 转发与默认 shell 混淆

bash我的 bash 配置文件中有一个特定的代码:

$ cat ~/.bash_profile
#!/usr/bin/env bash

echo "SHELL: $SHELL"
function printfiles() {
  while IFS='' read -r _file || [[ -n "$_file" ]]; do
    echo "file: ${_file}"
  done < <(ls)
} && export -f printfiles

< <(FUNCTION)bash特定语法,不支持sh。当我使用 ssh 登录到远程计算机时:

$ ssh my.remote
[email protected]'s password: 
Last login: Fri Nov 17 11:27:39 2017 from yyy.yy.yy.yy
sourcing /home/me/.bash_profile
SHELL: /bin/bash

一切正常。现在我想再次登录,但转发我的X11

$ ssh -X my.remote
[email protected]'s password: 
sh: printfiles: line 2: syntax error near unexpected token `<'
                                                              sh: printfiles: line 2: ` done < <(ls)'
                                                                                                     sh: error importing function definition for `printfiles'
               sh: printfiles: line 2: syntax error near unexpected token `<'
                                                                             sh: printfiles: line 2: ` done < <(ls)'
                                                                                                                    sh: error importing function definition for `printfiles'
                              sh: printfiles: line 2: syntax error near unexpected token `<'
                                                                                            sh: printfiles: line 2: ` done < <(ls)'
                                                                                                                                   sh: error importing function definition for `printfiles'
                                             sh: printfiles: line 2: syntax error near unexpected token `<'
                                                                                                           sh: printfiles: line 2: ` done < <(ls)'
    sh: error importing function definition for `printfiles'
                                                            Last login: Fri Nov 17 11:28:51 2017 from yyy.yy.yy.yy
sourcing /home/me/.bash_profile
SHELL: /bin/bash

我不知道发生了什么,似乎当我进行 X11 转发时,shshell 以某种方式被使用bash。为什么会这样,如何解决?

答案1

如果我发现 -X 和 -x 登录之间存在不一致,我怀疑:

  1. .bash_profile/.profile 和 .bashrc 之间的区别 - 请参阅https://serverfault.com/a/261807/116193
  2. 本地环境与远程环境的交互 - 我通过剥离对本地环境的控制来进行调试,例如env -i ssh ...

另外:一般来说,我喜欢使用 -x 来排除许多此类故障。您可能能够在服务器端配置 Shell,以在登录时启用跟踪 (-x)。

如果我想到其他的,我会更新。

相关内容