なぜ screen は sftp で問題を引き起こすのでしょうか?

なぜ screen は sftp で問題を引き起こすのでしょうか?

私は screen を使うのが好きですが、ssh 経由での使用経験はあまりありません。最近、職場でシェル アカウントが発行されたので、ログイン時に screen が実行されるように設定してみることにしました。私は putty を使用して ssh 経由でリモートでログインしています。

とにかく、私は 2 つの方法を試しましたが、どちらもかなりうまく機能しているようでした。

  1. 接続時に/usr/bin/screen -Rを実行するようにputtyを設定し、
  2. .bashrc に次の行を追加しました:if [ -z "$STY" ]; then /usr/bin/screen -R; fi

問題は、後でいくつかのファイルを scp しようとしたのですが、接続できなかったことです。「ターミナルに接続する必要があります」と表示されました。Filezilla も試しましたが、接続に大きな問題がありました。グーグルで調べてみたところ、どうやらログイン シェルとして screen を使用しようとして sftp がおかしくなったのは私が初めてではないようです。http://winscp.net/forum/viewtopic.php?t=1715

なぜこのようなことが起きているのか、誰かに洞察を与えてもらえないかと思っています。まったく見当もつかないので、理解して回避策を見つけたいと思っています。

答え1

ログイン シェルに関連するものはすべて に~/.bash_profile、対話型 (非ログイン) シェルに関連するものはすべて に配置する必要があります~/.bashrc。bash(1) のマニュアル ページから:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

~/.bashrcしたがって、単にシンボリックリンクを作成するのではなく~/.bash_profile(またはその逆)、多少異なる内容を含む 2 つの別々のファイルを用意する必要があります。

[ -z "$STY" ] && then /usr/bin/screen -Ronly を入力すると~/.bash_profile、対話型シェルを起動するたびに screen が実行されるのではなく、実際にログインしているときにのみ screen が実行されます (現在、手元に scp ソースはありませんが、実際にシェルを起動して、シェルがプロセスを生成したというかすかな記憶があります~/.bashrc)。

関連情報