現在の端末デバイス名(/dev/pts/1とか)を取得するには通常はtty
というコマンドで探せるが、これはあくまで現在入力中プロセスの端末名しか取得できない。つまりスクリプト内などで起動元プロセスの端末名を取得するのには使えない。
なので自分で親プロセスを辿ってttyを探すスクリプトを作ってみた。
search_tty.sh
#!/bin/bash
# プロセスに紐付いたttyを取得する https://qiita.com/kawaz/items/bd33fe1e29876939dddb
function search_tty() {
local pid=${1:-$$} tty=""
while [[ 1 -lt $pid ]]; do
[[ -d /proc/$pid/fd ]] || break
tty=$(readlink /proc/$pid/fd/1 2>/dev/null | awk '{print $1}')
[[ -c $tty ]] && { echo "$tty"; return 0; }
pid=$(perl -pe 's/\(.*\)/()/' /proc/$pid/stat | awk '{print $4}')
done
return 1
}
search_tty $1
これは第1引数に指定されたプロセスIDに紐付いたttyを探すスクリプトです。
PIDが渡されなかった場合は現在のプロセスIDを元にttyを探します。
他でコピペ利用しやすいようBash関数にしてからに実行してます。