'-sh:構文エラー:組み込みLinuxデバイスでプロセスの置き換えに 'bash'を使用しようとしたときに予期しない '(''

'-sh:構文エラー:組み込みLinuxデバイスでプロセスの置き換えに 'bash'を使用しようとしたときに予期しない '(''

これは以下を使用します。「プロセス置換」<())と「ブリードッグ」cat << EOF...EOF)は新しいbashプロセスを開き、ここで--rcfileincludeを実行しますalias foo="echo hey you

bash --rcfile <(
cat << EOF
alias foo="echo hey you"
EOF
)

ここからわかるように、Ubuntuではうまく動作します。

$ bash --rcfile <(
> cat << EOF
> alias foo="echo hey you"
> EOF
> )
$ foo
hey you
$ alias
alias foo='echo hey you'

ただし、一部の組み込みLinuxデバイスでこのプログラムを実行しようとすると、次のエラーが発生します。なぜ?そこで実行するにはどうすればよいですか?

-sh: syntax error: unexpected "("

フル出力:

$ bash --rcfile <(
-sh: syntax error: unexpected "("
$ cat << EOF
> alias foo="echo hey you"
> EOF
alias foo="echo hey you"
$ )
-sh: syntax error: unexpected ")"

役に立つ場合は、Linuxデバイスが組み込まれているUbuntuからの出力は次のとおりですwhich bashbash --version

# 1. Ubuntu

$ which bash
/bin/bash
$ bash --version
GNU bash, version 4.4.20(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


# 2. Embedded Linux device

$ which bash
/bin/bash
$ bash --version
GNU bash, version 5.0.16(1)-release (aarch64-buildroot-linux-gnu)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

繰り返さない:

これは関係ありますが、いいえ重複しているようです。プロセス置換を使用すると、Dashは「構文エラー:」(「予期しない」エラー)を報告します。

関連:

  1. 【自分だけの質問】https://stackoverflow.com/questions/69891328/what-is-the-syntax-in-shell-bash-and-how-do-i-search-for-it

自分に関するメモ

私の究極の目標は、SSHログイン時に次のようにいくつかのカスタムエイリアスを自動的に生成することです。

ssh -t username@ip_address '/bin/bash --rcfile <(
cat << EOF
alias foo="echo hey you"
EOF
)'

アップデート完了!これが私が思いついたものです:

# Store your password into a file
echo "my_password" > ~/pw

# Manually add something like this to your ~/.bash_aliases (recommended) or ~/.bashrc file on the PC
# you are ssh-ing FROM:
alias gs_ssh="sshpass -f ~/pw scp /etc/skel/.bashrc [email protected]:/tmp \
&& sshpass -f ~/pw ssh -t -o 'ServerAliveInterval 60' [email protected] 'bash --rcfile /tmp/.bashrc'"

ここで私のリポジトリをチェックしてください。https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/tree/master/home/.ssh#Optional-but-recommended-alias

ベストアンサー1

組み込みLinuxデバイスは/dev/fd/アイテムをサポートしていますか?これを行うには、次のようにファイル記述子#3を介して初期化コマンドを渡します。

bash --rcfile /dev/fd/3 3<<EOF
alias foo="echo hey you"
exec 3<&-
EOF

編集:Stéphane Chazelasはこれをexec 3<&-「スクリプト」の最後のコマンドとして追加することを提案しました。これにより、ファイル記述子が閉じて、シェル全体のセッション中に停止しなくなります。

おすすめ記事