Подставьте вывод из переменной, чтобы дать другой вывод - PullRequest
0 голосов
/ 06 сентября 2010

Я пытаюсь заменить вывод переменной, чтобы выдать другой вывод. Переменная, с которой у меня проблемы, это $ apps. Это дает мне «синтаксическая ошибка: плохая замена».

$ appletDir - это каталог с ярлыками на рабочем столе. Проблема в том, что некоторые ярлыки не имеют того же имени, что и значок (png). Поэтому мне нужно заменить имя программы на png, ссылающуюся на него. Я понял, что работает с закомментированным оператором if ниже. Если бы эта замена могла сработать, мой сценарий выглядел бы лучше. Потому что мне нужно отложить пару из этого.

Я хочу, чтобы он просматривал «general_call» вместо «rtcom-call-ui» при просмотре папок с иконками. Потому что png называется "general_call". Папки с иконками являются переменными $ icoDir64 $ icoDirSca.

for applet in $appletDir*
do

app=`basename $applet | sed -e 's/.*://g' -e 's/.*osso-//g' -e 's/\.desktop.*//g'`
apps="${app/rtcom-call-ui/general_call}"
    #if [ "${app}" = "rtcom-call-ui" ]; then
    #   app="general_call"
    #fi
#echo $apps
#done
#exit 0

found=`find ${icoDir64} ${icoDirSca} -name "*.png"`

for file in $found
do
    base="`basename ${file}`"

    if [ "${base}" = "${app}.png" -o "${base}" = "tasklaunch_${app}.png" -o "${base}" = "general_${app}.png" ]; then
        echo "WORKING!!!!!!!!!!!!!!!!!! $file" 
    fi
done
done

1 Ответ

1 голос
/ 06 сентября 2010

Я думаю, что у вас может быть проблема с версией оболочки (ваша оболочка не такая современная, как используемая вами запись).Предыдущее воплощение этого поста предлагало:

apps="${app}/rtcom-call-ui/general_call"

Или, для замены rtcom-call-ui на general_call, вам нужно использовать echo и sed (по крайней мере, в классических оболочках - это может бытьчто bash имеет что-то встроенное для этого):

apps=$(echo "${app}" | sed s/rtcom-call-ui/general_call/)

Обозначение ${var|continuation} (где | представляет произвольный знак пунктуации) используется для изменения подставляемого значения.Например:

apps="${app:-/something/suitable/as/the/default}"

будет копировать значение $app, если $app вообще не задано (здесь не имеет значения; полезно для переменных среды) или если $app - пустая строка.

Ошибка, которую вы получаете, заключается в том, что в вашей версии оболочки нет действительной замены, начинающейся с '/' .Эта запись, кажется, действительна в некоторых версиях Bash (включая ту, с которой мне приходится играть);Я не знаю, когда это было добавлено.Но если используемая оболочка жалуется на нотацию, то, очевидно, она не подходит для используемой версии оболочки.

В зависимости от строки shebang (#!/bin/sh против #!/bin/bash),это может работать по-другому.В противном случае версия Bash на вашем компьютере может быть слишком старой.

Вы можете проверить свои оболочки с:

for app in /some/location/rtcom-call-ui/where.png /another/location/nowhere/thing.png
do
    apps=${app/rtcom-call-ui/general-call}
    echo $app
    echo $apps
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...