(( dirct=$(echo ${dir}|tr "/" " "|wc -w)+1 ))
i=2
while [ ${i} -le ${dirct} ]
do
sdir=$(echo ${dir}|cut -d/ -f1,${i})
if [ ! -d ${sdir} ]
then
echo "Path is broken at ${sdir}"
fi
(( i++ ))
done
это непросто, но вы можете поместить его в сценарий, сделать его исполняемым и прикрепить где-нибудь на своем пути, если вы собираетесь его часто использовать.
Caveat emptor: если имя вашего каталога на любом уровне содержит символ пробел
, это НЕ будет работать.
С вашим терминалом и оболочкой все в порядке. По умолчанию ps
показывает процессы с тем же эффективным идентификатором пользователя, что и пользователь, выполняющий их, и связанные с тем же терминалом. Обычно это приводит к тому, что только два процесса отображают :текущую оболочку и саму ps
. Если с текущим терминалом связаны какие-либо фоновые процессы, они также будут отображаться; вы можете увидеть это, запустив
sleep 120 &
ps
Чтобы увидеть все процессы, запустите
ps -e
Существует ряд других флагов выбора процесса, подробности см. в man ps
в вашей системе.
Когда вы запускаете script
, он выделяет новый терминал и запускает новую оболочку; поэтому ps
внутри script
работает на другом терминале (, даже если он находится в том же окне терминала в вашей системе или на той же виртуальной консоли ). Вот почему вы не видите script
. Вы можете увидеть, как это происходит, запустив tty
до и после запуска script
:, вы увидите два разных значения.
См. также В чем разница между «терминалом», «оболочкой», «tty» и «консолью»?