Вы можете написать небольшой фрагмент кода lua
, чтобы сделать это за вас. Например, в вашем ~ / .conkyrc
:
lua_load /tmp/mylua.lua
TEXT
${lua conky_myfun ${top cpu 1}}
и в файле /tmp/mylua.lua
do
function conky_myfun(arg)
local n = conky_parse(arg)
return math.floor(tonumber(n)+.5)
end
end
. Это вызывает conky_myfun
с заданным аргументом. Функция
оценивает аргумент, чтобы получить значение, оно преобразуется в число
и округляется до ближайшего целого числа.
Проблема в вашем сценарии заключается в том, что ваша awk
программа устанавливает первое поле в пустую строку. При этом вы не удаляете его, и поэтому вы получаете пробел (разделитель выходного поля по умолчанию )в качестве первого символа в вашей переменной оболочки path
. pushd
не может найти каталоги, которые вы ему подаете, из-за пробела в начале имен, и отсюда вы получаете ошибки.
Вместо этого вы можете сделать что-то вроде
sed 's/^[[:blank:]]*[0-9]*[[:blank:]]*//' <"$1" |
while IFS= read -r pathname; do
pushd "${pathname/#\~\//$HOME/}"
done
sed
удаляет все начальные пробелы и цифры в начале строки до того, как read
ее прочитает.
Как обсуждалось в комментариях :, замена ${pathname/#\~\//$HOME/}
заменит тильду только в том случае, если она встречается вместе с /
в самом начале $pathname
. Для обработки одиночного ~
вам, возможно, придется добавить отдельную замену или что-то вроде
case "$pathname" in
"~") pathname=$HOME ;;
"~/"*) pathname=${pathname/#\~/$HOME} ;;
esac
pushd "$pathname"
Если бы входной файл был создан с помощью dirs -l -p
, то цикл был бы еще проще:
while IFS= read -r pathname; do
pushd "$pathname"
done <"$1"