Posso passar uma string multilinha para svn no PowerShell?

Posso passar uma string multilinha para svn no PowerShell?

Eu tenho a seguinte linha em um script:

svn propset svn:externals $newExternals $path

Agora, pela primeira vez, $newExternalsé uma string multilinha (existem várias svn:externalpropriedades) e svnlate para mim de uma forma que parece indicar que não consegue lidar com o argumento.

Não posso passar uma string multilinha para um programa que invoco no PowerShell?Ou isso é um problema de svnnão ser capaz de analisar isso? Ou preciso de orçamentos? (Não ajudou, mas posso ter estragado outra coisa.)


Se isso não funcionar, svntambém aceitaria um arquivo para ler o material:

svn propset svn:externals -F externals.txt $path

No entanto, isso parece falhar porque svnespera externals.txtser um arquivo ASCII (ou UTF-8, não tenho certeza, mas não acho que seja relevante aqui), enquanto o PowerShell, por padrão, grava UTF-16. Então, qual é a maneira canônica de canalizar algo para um arquivo ASCII?


Como pergunta paralela: Qual é a maneira canônica de obter um caminho para criar um arquivo temporário?

Responder1

[io.path]::GetTempFileName() retornará um nome de arquivo temporário (incluindo o caminho)

Responder2

Não estou familiarizado com isso svn, então desculpe-me se o seguinte não for relevante ... mas você certamente pode passar strings de várias linhas para o Powershell ou para um programa invocado pelo Powershell (supondo que o programa invocado o suporte).

Aqui está uma maneira de fazer isso que eu particularmente gosto, da Dica da semana do Technet Windows Powershell. (Powershell 'Aqui-Strings').

E aqui está outro, de uma resposta SO, embora eu não tenha ideia se isso funcionará com um programa invocado... apenas que funciona nativamente no PowerShell.

Finalmente, strings (em todas as variedades) também podem se estender além de uma única linha:

'Foo
bar'

Se nenhuma das técnicas funcionar, eu diria que você se deparou com uma limitação de svn.

Responder3

No Windows, a pasta temporária dos usuários pode ser encontrada usando a variável de sistema TEMP ou TMP.

[Batch]
echo %TEMP%
echo %TMP%

[Powershell]
echo $env.temp
echo $env.tmp

informação relacionada