我正在尝试打印除用于执行此检查的当前终端之外的用户的所有终端。要获取当前终端,我正在使用 tty
命令,如果单独使用它可以正常工作。但是,当与 awk
结合使用时,它会失败。
为什么下面的命令失败?
-->ls -l /dev/pts/ |grep ${USER} |awk -v current_tty=$(tty) '{n=split(current_tty,a,"/")} $0 !~ a[n] {print $0}'
awk: fatal: cannot open file `tty' for reading (No such file or directory)
然而,当我用 $(echo/dev/pts/44)
替换 $(tty)
时,同样的命令起作用了。
-->tty
/dev/pts/44
-->ls -l /dev/pts/ |grep ${USER} |awk -v current_tty=$(echo /dev/pts/44) '{n=split(current_tty,a,"/")} $0 !~ a[n] {print $0}'
crw--w---- 1 monk tty 136, 15 Feb 5 10:16 15
crw--w---- 1 monk tty 136, 19 Feb 5 10:16 19
crw--w---- 1 monk tty 136, 28 Feb 5 10:16 28
crw--w---- 1 monk tty 136, 35 Feb 5 10:22 35
crw--w---- 1 monk tty 136, 39 Feb 5 10:18 39
crw--w---- 1 monk tty 136, 43 Feb 5 10:18 43
crw------- 1 monk tty 136, 46 Feb 5 10:16 46
crw--w---- 1 monk tty 136, 48 Feb 5 10:16 48
crw--w---- 1 monk tty 136, 8 Feb 5 10:16 8
我单独运行了$(tty)
,它的工作
-->echo $(tty)
/dev/pts/44
尝试了导致相同结果的替代方法:
ps -eaf |awk -v USER=${USER} -v current_terminal=$(tty) '$1==USER && $6 != "?"'
最佳答案
find /dev/pts -mindepth 1 -maxdepth 1 \
-type c \
-user "$USER" \
! -path "$(tty)" \
-print
也就是说,我们发现:
/dev/pts
的直接子级- ...这是字符设备(就像所有 PTY 一样)...
- ...并且归当前用户所有...
- ...哪些不是当前的 tty。
关于bash - 打印除当前用户之外的所有用户终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60080263/