У меня есть специфичный для 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
. Почему так, как это решить?