5

У меня есть специфичный для 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
me@xxx.xx.xxx.xx'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
me@xxx.xx.xxx.xx'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, оболочка sh используется поверх bash . Почему так, как это решить?

1 ответ1

0

Если я вижу несоответствия между именами -X и -x, я подозреваю:

  1. Различия между .bash_profile/.profile и .bashrc - смотрите отличную дискуссию на https://serverfault.com/a/261807/116193
  2. Взаимодействие моей локальной среды с удаленным - я отлаживаю это, удаляя управление локальной средой, например, с помощью env -i ssh ...

Кроме того: в общем, я люблю использовать -x для устранения многих подобных проблем. Возможно, вы сможете настроить оболочку на стороне сервера, чтобы включить трассировку (-x) при входе в систему.

Если я подумаю о других, я обновлю.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .