Для rm
нет ничего магического в >
. Нужно только убедиться, что угловая скобка дойдет до нее (= интерпретировать оболочку, интерпретируя ее как перенаправление).
> "> option[value='2016']" #create it
rm "> option[value='2016']" #remove it
#remove all files in the current directory that have > in them
rm -- {,.}*\>*
Если вы находитесь на разумной современной системе, вы должны быть в состоянии получить правильно экранированные имена с заполнением табуляции.
Lo que funcionará en bash
y en otros shells es establecer parámetros posicionales desde la salida de la tubería:
set -f -- $(kubectl get pods -o wide --all-namespaces | grep sonarqube- )
En este caso, ahora puede acceder a las variables como $1
, $2
, etc.
En bash
es posible crear una variable de matriz, así:
var=( $(kubectl get pods -o wide --all-namespaces | grep sonarqube- ) )
El modismo es var=(... )
, en este caso la salida de su tubería grep
.
Luego puede acceder a los elementos de su matriz utilizando el formulario ${var[n]}
, con n
comenzando en cero.
Con la función bash read
:
read -r namespace deployment other < <(kubectl get pods -o wide --all-namespaces | grep sonarqube-)
kubectl cp <file> "${namespace}/${deployment}:/opt/app/extensions/plugins/"
En casos como este (con columnas de salida predecibles ), suelo buscar awk. Algo como esto podría ser útil:
kubectl get pods -o wide --all-namespaces | awk '/sonarqube-/ { cmd=sprintf("kubectl cp <file> %s/%s:/opt/app/extensions/plugins", $1, $2); print(cmd); system(cmd); }'