명령을 사용하여 원격 컴퓨터에 연결한 후 sftp hostname
프롬프트 에서 "Escape to local shell`을 입력 !
할 수 있습니다 .sftp
내가 에 의해 생성된 쉘에 있는지 알 수 있습니까 sftp
?
답변1
쉽게 확인할 수 있는 방법은 없습니다(예를 들어 sftp에서 시작된 쉘을 식별하는 환경 변수가 없습니다).
프로세스 트리를 올라가서 조상 중 하나가 프로세스인지 확인할 수 있습니다 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"
답변2
% sftp myhost
Connected to myhost.
sftp> !sh
$ if pgrep -s 0 sftp >/dev/null; then echo 'in sftp session'; fi
in sftp session
현재 쉘과 동일한 세션에서 실행 중인 명령이 pgrep
있는지 테스트 하는 데 사용됩니다 . sftp
그렇다면 이 쉘은 아마도 sftp
.
pgrep
이 옵션을 지원 하는 경우 -q
출력을 로 리디렉션하는 대신 이 옵션을 사용하십시오 /dev/null
.
pstree -s -p "$$"
빠른 시각적 검사를 위해 (Linux의 경우, 구현 pstree -p "$$"
에 따라 일부 BSD의 경우 ) 사용할 수도 있습니다 pstree
. 그러면 현재 프로세스의 프로세스 트리가 표시되며 sftp
육안으로 확인할 수 있기를 바랍니다.