bash - 打印除当前用户之外的所有用户终端

标签 bash awk

我正在尝试打印除用于执行此检查的当前终端之外的用户的所有终端。要获取当前终端,我正在使用 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/

相关文章:

regex - 在文件开头添加多行

awk - 让 grep 显示带有前导零、前导空格或填充的行号

linux - 使用对话框实用程序保存文件

linux - 在 Linux 中输出中的关键字后终止命令

awk - 如何用awk处理3个文件?

sed - 用 '|'替换双引号中没有包含的每个逗号

linux - 适用于 Linux 和 Solaris 的通用 grep 方法

bash - CDPATH 配置但不工作

bash - 拆分并推送提交的文件到两个不同的分支

Bash通过多字符定界符将多行字符串拆分为数组