Tengo la siguiente línea en un script:
svn propset svn:externals $newExternals $path
Ahora, por primera vez, $newExternals
hay una cadena de varias líneas (hay varias svn:external
propiedades) y svn
me ladra de una manera que parece indicar que no puede manejar el argumento.
¿No puedo pasar una cadena de varias líneas a un programa que invoco en PowerShell?¿O es un problema por svn
no poder analizar eso? ¿O necesito cotizaciones? (No ayudó, pero es posible que haya arruinado algo más).
Si esto no funciona, svn
también aceptaría un archivo para leer el material:
svn propset svn:externals -F externals.txt $path
Sin embargo, esto parece fallar porque svn
espera externals.txt
ser un archivo ASCII (o UTF-8, no estoy seguro, pero no creo que sea relevante aquí), mientras que PowerShell escribe de forma predeterminada UTF-16. Entonces, ¿cuál es la forma canónica de canalizar algo en un archivo ASCII?
Como pregunta paralela: ¿Cuál es la forma canónica de obtener una ruta para crear un archivo temporal?
Respuesta1
[io.path]::GetTempFileName() devolverá un nombre de archivo temporal (incluida la ruta)
Respuesta2
No estoy muy familiarizado con svn
, así que disculpe si lo siguiente no es relevante... pero ciertamente puede pasar cadenas de varias líneas a Powershell o a un programa invocado por Powershell (suponiendo que el programa invocado lo admita).
Aquí hay una forma de hacerlo que me gusta especialmente, del Consejo de la semana de Technet Windows Powershell. (Powershell 'Here-Strings').
Y aquí hay otro, de una respuesta SO., aunque no tengo idea si esto funcionará con un programa invocado... solo que funciona de forma nativa en PowerShell.
Finalmente, las cadenas (en todas las variedades) también pueden extenderse más allá de una sola línea:
'Foo
bar'
Si ninguna de las técnicas funciona, diría que se ha topado con una limitación de svn
.
Respuesta3
En Windows, la carpeta temporal de los usuarios se puede encontrar utilizando la variable del sistema TEMP o TMP.
[Batch]
echo %TEMP%
echo %TMP%
[Powershell]
echo $env.temp
echo $env.tmp