заменить строку в классе bash и azuredevops (конвейер ios xamarin) - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь написать bash-скрипт для изменения строки в классе для моего конвейера Azure Devops. Но не могу заставить его работать.

Скопировал скрипт из https://github.com/Microsoft/appcenter-build-scripts-examples/blob/master/xamarin/app-constants/appcenter-pre-build.sh

myпопытка bash:

  1. Добавлена ​​задача bash (встроенный скрипт)
  2. Создана переменная env API_URL со значением = "https://production.com/api"
  3. Мой класс для изменения

    namespace Core
    {
       public class AppConstant
       {
         public const string ApiUrl = "https://production.com/api";
         public const string AnotherOne="AAA";
       }
    }        
    

Мой скрипт

    if [ ! -n "$API_URL" ]
    then
        echo "You need define the API_URL variable"
        exit
    fi

    APP_CONSTANT_FILE=$(Build.SourcesDirectory)/MyProject/Core/AppConstant.cs

    if [ -e "$APP_CONSTANT_FILE" ]
    then
        echo "Updating ApiUrl to $API_URL in AppConstant.cs"
        sed -i '' 's#ApiUrl = "[a-z:./]*"#ApiUrl = "'$API_URL'"#' $APP_CONSTANT_FILE

        echo "File content:"
        cat $APP_CONSTANT_FILE
    fi

почему моя переменная не меняется? Большое спасибо

1 Ответ

0 голосов
/ 21 ноября 2018

Ваш скрипт корректен и получит желаемый результат, удаляйте только двойные апострофы после sed -i:

sed -i 's#ApiUrl = "[a-z:./]*"#ApiUrl = "'$API_URL'"#' $APP_CONSTANT_FILE

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

sed -i 's#ApiUrl = "[a-z:\./]*"#ApiUrl = "'$API_URL'"#' $APP_CONSTANT_FILE

Или даже для этого (чтобы взять любые символы между кавычками):

sed -i 's#ApiUrl = "[^"]*"#ApiUrl = "'$API_URL'"#' $APP_CONSTANT_FILE

Тест:

$ cat > developer9969.txt
namespace Core
{
   public class AppConstant
   {
     public const string ApiUrl = "https://production.com/api";
   }
}

API_URL='https://kubator.com/'
APP_CONSTANT_FILE='./developer9969.txt'
sed -i 's#ApiUrl = "[^"]*"#ApiUrl = "'$API_URL'"#' $APP_CONSTANT_FILE

$ cat $APP_CONSTANT_FILE
namespace Core
{
   public class AppConstant
   {
     public const string ApiUrl = "https://kubator.com/";
   }
}
...