답변:
아마도 :
if lsof -tac script "$(tty)" > /dev/null; then
echo "I'm running under script"
else
echo "I'm not"
fi
다음과 같은 것을 추가 할 수 있습니다.
lsof -tac script "$(tty)" > /dev/null && PS1="[script] $PS1"
당신에 ~/.zshrc
또는 ~/.bashrc
, 당신이있어 여부에 대한 정보, 그래서 script
여부를 프롬프트 쉘에 표시 될 것입니다.
또는 lsof
설치를 보장 할 수 없으면 수정하지 않은 IFS를 가정하여 수행 할 수 있습니다.
terminal=$(ps -o comm= -p $(ps -o ppid= -p $(ps -o sid= -p "$$")))
[ "$terminal" = script ] && PS1="[script] $PS1"
휴리스틱은 일반적으로 터미널 에뮬레이터 것 세션 리더의 부모의 명령 이름을 얻을 수 있습니다 ( xterm
, script
, screen
...).
script
시작된 셸 ) 를 확인하려고합니다 .
script
뿐만 아니라 다른 상황을, 같은 su -l
, ssh
리눅스 콘솔과 아마도 다른 사람 일 수도 있고 (다른 주장을 통해 ps
) 훨씬 더 많은 정보 를 제공 할 수도 있습니다 .
재미있는 문제. 작은 bash 스크립트가 작업을 상당히 안정적으로 수행 할 수 있음을 발견했습니다.
#!/bin/bash
PP=$(ps -o ppid= $$)
while [[ $PP != 1 ]]
do
LINE=$(ps -o ppid= -o comm= $PP | sed 's/^ *//')
COMM=${LINE#* }
PP=${LINE%% *}
if [[ $COMM == script ]] # Might need a different comparison
then
echo "In script"
exit 0
fi
done
echo "Not in script"
필자는 스크립트가 PID 1을 찾거나 프로세스로 "스크립트"를 찾을 때까지 Linux / Unix 프로세스가 갖는 부모 : 자식 관계를 처리한다는 점에서 Stephane Chazelas가 제안한 것과 약간 다릅니다.
xterm
스크립트 세션에서 시작하는 경우 해당 스크립트는 해당 xterm의 셸이 스크립트에서 실행됩니다. 글쎄요,하지만 출력은 타자기에 들어 가지 않습니다. 내 접근 방식은 현재 세션과 관련된 터미널을 확인하므로 문제가 없습니다.
경로에 개인 bin / 디렉토리가있는 경우 (예 : / home / user / bin) 다음 컨텐츠와 함께 'script'(이진과 동일한 이름) 이름을 가진 쉘 스크립트를 배치하십시오.
#!/bin/bash
export SCRIPT_RUNNING=1
exec /usr/bin/script # full path to your script(1) binary
이제 스크립트 실행 내에서 환경 변수 SCRIPT_RUNNING을 테스트하고이를 기반으로 원하는 모든 작업을 수행 할 수 있습니다.
편집하다:
실제로 훨씬 쉬운 방법이 있습니다. 다음은 모두 ~ / bin / script, ~ / bin / script-shell 및 ~ / .scriptrc 파일을 만듭니다.
~ > ls ~/bin/script ~/bin/script-shell ~/.scriptrc
-rw-r--r-- 1 roadowl users 23 Oct 18 16:52 /home/roadowl/.scriptrc
-rwx------ 1 roadowl users 49 Oct 18 16:53 /home/roadowl/bin/script
-rwx------ 1 roadowl users 56 Oct 18 16:55 /home/roadowl/bin/script-shell
~/bin > cat script
#!/bin/bash
exec /usr/bin/script -c script-shell
~/bin > cat script-shell
#!/bin/bash
exec /bin/bash --rcfile /home/bjd/.scriptrc
~/bin > cat ~/.scriptrc
export PS1="[script] "
현재 쉘이 bash라면 hash -r
'script'를 명령으로 입력 할 때 ~ / bin / script가 실행되도록 이러한 파일을 만든 후에 실행하는 것을 잊지 마십시오 (로 확인하십시오 which script
).
이전과 마찬가지로 PATH에 ~ / bin이 있어야 표준 경로보다 앞에 있어야합니다.
script
있고 tty가 열려 있는 모든 명령 은 오탐 (false positive)을 유발합니다.