Это потенциально немного опасно, но
cp * destination/
rm *
Поскольку и cp, и rm не будут работать с каталогами без переключателя -r.
После долгих экспериментов вот что у меня получилось:
Найдите экран, под которым работает оболочка. Продолжайте обход pstree, пока не будет найден экранный процесс :
.screen_pid=$(pstree -psUA $$ | egrep -o 'screen\([0-9]+\)' | tail -1 | egrep -o '[0-9]+')
Просмотр всех открытых файлов для этого процесса.Найдите единственный файл /dev/pts/ *в этом списке:screen_pts=$(lsof -p $screen_pid | grep /dev/pts | awk '{print $NF}')
Найдите экранный процесс, управляющий этим псевдо-терминалом -:ps -o pid=,tty= -C screen | grep ${screen_pts/\/dev\/} | awk '{print $1}'
Оттуда родительским процессом будет оболочка/ssh/что угодно, запустившее экран, который теперь присоединен к оболочке.
Определенно здесь сделаны некоторые хакерские предположения, что «работает на моей машине (tm )», но это общая идея.
Если требуется надежность, использование stat
с st_rdev
устранит хакерскую замену /dev/pts/5 -> pts/5. И что-то подобное можно использовать для фильтрации списка открытых файлов, где major(st_rdev)
== какое-то значение, представляющее псевдотерминалы.