Способ Linux для проверки блокировки: sudo hdparm -I / dev / sdX
(с X = a..z; необходимо конечно знать, какое у вас устройство). В конце (большого) вывода вы ДОЛЖНЫ иметь возможность прочитать в последних 10 строках: * not * locked
.
Не пытайтесь запускать команды, хранящиеся в переменных (, если это не просто имя команды и/или путь ). Это обречено на неудачу интересными способами, если вы не получите правильное цитирование (, которое может быть неудобным и привести к менее надежному коду ).
В вашем случае достаточно
cd "/rbyoko/$c/\$Ono.RCB"
т. е. укажите путь к каталогу (, чтобы разрешить $c
иметь пробелы ), а затем избежать $
.
В качестве альтернативы:
cd "/rbyoko/$c"/'$Ono.RCB'
т. е. одинарная кавычка бита со знаком доллара, чтобы защитить его от оболочки.
Ваша функция изменена:
visit_tree_recbin () {
for dir in c d h l o t p w; do
cd "/rbyoko/$dir"/'$Ono.RCB'
printf 'We are now in %s\n' "$PWD"
done
}
Как вариант,
visit_tree_recbin () {
for dirpath in /rbyoko/[cdhlotpw]/'$Ono.RCB'/; do
cd "$dirpath"
printf 'We are now in %s\n' "$PWD"
done
}
Разница в том, что первый вариант создает пути к каталогам и cd
в них. Это может завершиться ошибкой, если каталог не существует.
Второй вариант использует шаблон подстановки имен файлов, который соответствует существующим каталогам. Если шаблон соответствует чему-либо, cd
преуспеет (, если у вас есть разрешение cd
в каталог ).
Обратите внимание, что bash
поддерживает переменную PWD
, которая содержит путь к текущему рабочему каталогу, поэтому нет необходимости использовать здесь pwd
.