Bash выставляет стопку каталога в DIRSTACK
переменная. Можно также использовать команду dirs +2
относиться к второй записи на стеке.
Более удобно, ~1
через ~9
обратитесь к девяти самым верхним записям на стеке. Таким образом, Ваш пример перевел бы в
chb$ cp ~2/baz.css ~/code/bar/view/static/css/
Zsh имеет то же ~n средство, и стек выставляется через названный массив dirstack
. Bash dirs +2
zsh's print -r ~2
или print -r $dirstack[2]
.
У меня была такая же проблема с уведомлением и отправкой.
Этот метод (также опубликованный здесь ) использует информацию о среде, которую предоставляет ps e
. ps e -u имя пользователя | sed -rn 's /.* DISPLAY = (: [0-9] *). * / \ 1 / p '
выводит список всех номеров DISPLAY в средах всех процессов пользователя имя пользователя .
Если на вашем рабочем столе есть окно, принадлежащее пользователю root, то у пользователя root также будет несколько процессов с тем же номером DISPLAY, но в противном случае один DISPLAY должен быть связан только с одним пользователем. (Не наоборот - прямо сейчас я вошел в систему на двух терминалах с двумя сеансами X, поэтому я использую оба: 0 и: 1.)
Этот код выведет все используемые в настоящее время ДИСПЛЕИ (следовательно, все X сессий) всех вошедших в систему пользователей. (root пропускается)
Обратите внимание на sudo
в команде ps
: права root необходимы для просмотра окружения процессов других пользователей. Конечно, если скрипт запускается от root, в этом нет необходимости.
Имена пользователей и отображаемые числа используются в качестве индексов ассоциативных массивов для сохранения только уникальных значений.
#!/bin/bash
declare -A disps usrs
usrs=()
disps=()
for i in $(users);do
[[ $i = root ]] && continue # skip root
usrs[$i]=1
done # unique names
for u in "${!usrs[@]}"; do
for i in $(sudo ps e -u "$u" | sed -rn 's/.* DISPLAY=(:[0-9]*).*/\1/p');do
disps[$i]=$u
done
done
for d in "${!disps[@]}";do
echo "User: ${disps[$d]}, Display: $d"
#sudo -u "${disps[$d]}" DISPLAY="$d" notify-send "Title" "Message"
done
Последняя закомментированная строка показывает, как можно вызвать notify-send.