「ローカルシェルへのエスケープ」を介してSFTPでシェルが作成されたことを確認する方法は?

「ローカルシェルへのエスケープ」を介してSFTPでシェルが作成されたことを確認する方法は?

コマンドを使用してリモートコンピュータに接続した後、sftp hostnameプロンプトで「Escape to local shell」と入力!できます。sftp

私が作成したシェルにあるかどうかはわかりますかsftp

ベストアンサー1

簡単に確認する方法はありません(たとえば、sftpで始まるシェルを識別する環境変数はありません)。

プロセスツリーを登って、祖先の1つがプロセスであることを確認できますsftp

#!/bin/bash

pid=$$
while :; do
  # if we reach pid 1, we know we're not a child of an sftp process
  [[ $pid -eq 1 ]] && break

  # get parent of $pid
  ppid=$(ps -o ppid= $pid)

  # get the command associated with $ppid
  cmd=$(ps -o cmd= -p $ppid)

  # check if it was sftp
  if [[ $cmd =~ sftp ]]; then
    echo "Running under sftp"
    exit
  fi

  pid=$ppid
done

echo "Not a child of sftp"

おすすめ記事