script
터미널의 모든 출력을이라는 파일에 저장 하는 명령을 사용하고 typescript
있습니다. 또는 script foo
파일에 저장합니다 foo
.
이제 명령 다음에 명령을 입력한다고 말하고 타이프 스크립트에 있는지 여부를 잊어 버립니다.
내가 타이프 스크립트 내에 있는지 어떻게 알 수 있습니까?
답변
아마도 :
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
…).
답변
재미있는 문제. 작은 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가 제안한 것과 약간 다릅니다.
답변
경로에 개인 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이 있어야 표준 경로보다 앞에 있어야합니다.