Я пытаюсь распечатать все терминалы пользователя, кроме текущего терминала, используемого для этой проверки. Для получения текущего терминала я использую команду 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)
Однако, когда я заменяю $(tty)
на $(echo /dev/pts/44)
, тогда эта же команда работает.
-->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 != "?"'