bashrcを使用してフィッシュを開くと(存在する場合)、scpの問題が発生します。

bashrcを使用してフィッシュを開くと(存在する場合)、scpの問題が発生します。

状態:複数のリモートサーバーにログインする必要があり、その一部にはフィッシュシェルがあります

必要:デフォルトのシェルはbashです。サーバーにログインし、Fishがある場合はFishシェルに切り替え、それ以外の場合はbashを保持します。

.bashrcを試しました。

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Source global definitions
if [ -f /etc/bash.bashrc ]; then
        . /etc/bash.bashrc
fi

# Update Path
export PATH=/sbin:/usr/sbin:/usr/local/sbin:$PATH:$HOME/.bin

# Open fish shell if present, otherwise stick to bash
if hash fish 2>/dev/null; then
        # echo "Fish detected, shifting shell"
        fish "$@"; exit
fi

しかし、scpがうまくいかないようです。ファイルをscpしようとすると、詳細な出力にファイルがここに添付されていると表示されます。

debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug1: Sending env LC_ADDRESS = en_US.UTF-8
debug1: Sending env LC_IDENTIFICATION = en_US.UTF-8
debug1: Sending env LC_MEASUREMENT = en_US.UTF-8
debug1: Sending env LC_MONETARY = en_US.UTF-8
debug1: Sending env LC_NAME = en_US.UTF-8
debug1: Sending env LC_NUMERIC = en_US.UTF-8
debug1: Sending env LC_PAPER = en_US.UTF-8
debug1: Sending env LC_TELEPHONE = en_US.UTF-8
debug1: Sending env LC_TIME = en_US.UTF-8
debug1: Sending command: scp -v -f test_file

echo最初はこのコマンドのために動作しないと思いましたが、このコマンドがなければ動作しません。

答え1

ファイルをインポートしたシェルセッションがインタラクティブでない場合にファイルを終了するには、bashrcファイルの上部(または便利な場所)で次の操作を実行できます。

case "$-" in
    *i*)        ;;
    *)   return ;;
esac

値は、$-現在設定されているシェルオプションを表す文字列です。iこの文字が文字列にある場合、シェルは対話型です。

terdonがコメントで指摘したように、BashはsshdSSHデーモンによって開始されたシェルセッションを特別なケースとして扱うので、これが必要になるかもしれません。

詳細:bashrcが現在のシェルが対話型であることを確認するのはなぜですか?

ファイルの下で、シェルが使用fish可能で起動されていることを確認できます。

if command -v fish 2>/dev/null; then
   exec fish
fi

一部のシステムでは、fish「Go Fish」ゲームかもしれません。 :-)

使用情報command -v:「which」を使わないのはなぜですか?それでは何を使うべきですか?

関連情報