回答:
多分:
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
、Linuxのコンソールとおそらく他のものであり、(の他の議論を通じて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"
これは、Stephane Chazelasによって提案されたものとは少し異なると思います。私のスクリプトは、Linux / UnixプロセスがPID 1を見つけるまで、またはプロセスとして「スクリプト」を見つけるまで、親子関係を上に向かって機能します。
xterm
スクリプトセッションからを開始すると、そのスクリプトは、そのxtermのシェルがスクリプトの下で実行されることに注意してください。まあそれはある方法ですが、出力はtypescriptに行きません。私のアプローチでは、現在のセッションに関連付けられている端末をチェックするため、その問題は発生しません。
パスに個人のbin /ディレクトリがある場合(例:/ home / user / bin)、 'script'(バイナリと同じ名前)という名前のシェルスクリプトを次の内容で配置します。
#!/bin/bash
export SCRIPT_RUNNING=1
exec /usr/bin/script # full path to your script(1) binary
これで、実行中のスクリプト内で、環境変数SCRIPT_RUNNINGをテストし、それに基づいて必要なことをすべて実行できます。
編集:
実際、はるかに簡単な方法があります。以下はそれをすべて言い、3つのファイル、〜/ 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
これらのファイルを作成した後に実行することを忘れないでくださいwhich script
。
前と同様に、これが機能するためには、PATHに〜/ binがあり、標準パスの前にある必要があることに注意してください。
script
ttyであり、ttyが開いているコマンドも、誤検知を引き起こします。