インポートされたbash関数からshエラーを取り除くには?

インポートされたbash関数からshエラーを取り除くには?

そのため、エクスポートされたbash関数がたくさんある.bash_aliasesファイルがありますが、その多くはshと互換性がありません。

問題は、shが私のラップトップ(OS X)とSSHを接続するLinuxボックスのどこでも使用されることです。また、常にbash機能とスパムエラーを取得しようとします。

問題の機能は次のとおりです。

  • 名前に「-」を含むすべての機能(注:LinuxではなくOS Xのスパムエラー)
  • そして構文がbashでのみ有効なlog()関数(以下)

    log() {
        # braces allow for piping of same output to multiple files
        { $@ 2> >(tee .err.log); } &> >(tee .out.log);
        echo; echo logged output to .err.log \& .out.log respectively;
    }
    export -f log
    

それでは、この問題をどのように解決するのですか?関数の名前を変更したり、* / binディレクトリに別のスクリプトに入れる必要がない場合は、より良いようです。

助けてくれてありがとう!

PSスクリーンショット:

ここに画像の説明を入力してください。

編集:情報が十分ではないことに気づきました。はい。.bash_profileソース.bashrcはソースです.bash_aliases(私はソースがありません.profile)。また、.bash_aliasesに終了句を作成しましたが、うまく$SHELL='sh'いきません。自分の環境から直接インポートする(@Bodoと同様に輸入スクリーンショットのエラー表示)。

編集2重要な注意:また、奇妙なことに、Linuxボックスから/ bin / shにsshを送信することがわかりました。bashへのシンボリックリンク。。これはbashを意味します。購入時にエラーは発生しません。環境からインポートすると、log()は実際にエラーを引き起こしますか?

ベストアンサー1

これらの関数をエクスポートしないでください。代わりに、必要な.bash_aliasesすべてのインスタンスにリソースを提供することをお勧めします。bash(対話型シェルの機能だけが必要だと思いますbash。)

同様の質問がここに記載されています。/bin/sh: 'some-function' の関数定義の取得中にエラーが発生しました。、ここで受け入れられる答えは関数の名前を変更することを示唆しています。

システムに接続していても、/bin/shPOSIXのように動作し、準拠しようとするとエラーが表示されます。bashbashshshhttps://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html#Invoked-with-name-sh

おすすめ記事