나는 xargs를 처음 접했습니다.
명령이 있어요
kubectl taint nodes xx.xx.xx.xx dedicated=test:NoSchedule --overwrite=true
명령이 있습니다. 위치 값을 xargs에 어떻게 전달할 수 있습니까? 통과되지 않았습니다.
echo \$NODES \$key_and_value \$overwrite \$label |
xargs -I -l % sh -c 'kubectl taint nodes \$0 % \$1 --overwrite=\$2'
기본적으로 저는 이런 일을 하고 있습니다. 젠킨스 UI에서 이 값을 가져옵니다. 이 값은 동적입니다.
echo \$NODES \$key_and_value \$overwrite |
xargs -I% bash -c 'kubectl --kubeconfig ./kube-configs/config \
taint nodes % "\$0" "\$1" --overwrite=% "\$2"'`
실수:
16:06:42 Error: invalid argument "ip-xx-xx-xx-xx.ec2.internal" for "--overwrite" flag: strconv.ParseBool: parsing "ip-xx-xx-xx-xx.ec2.internal": invalid syntax
답변1
명령 문자열 외부에 위치 매개변수를 정의해야 합니다.
echo a b c d | xargs -I VALUES sh -c "echo \$4 \$3 \$2 \$1" command VALUES
이것은 잘 설명되지 않았습니다 (내 경우에는 man dash
)
-씨
표준 입력 대신 command_string 피연산자에서 명령을 읽습니다. 특수 매개변수 0은 command_name 피연산자, 위치 매개변수($1, $2 등)에서 설정됩니다.나머지 매개변수 피연산자.
그러나 동작이 더 잘 설명됩니다 man bash
.
-씨
-c 옵션이 있는 경우 옵션이 아닌 첫 번째 인수 command_string에서 명령을 읽습니다. 만약 있다면command_string 뒤의 매개변수, 첫 번째 인수는 $0에 할당되고 나머지 인수는위치 매개변수에 지정됨. $0에 대한 지정은 경고 및 오류 메시지에 사용되는 쉘의 이름을 설정합니다.
$0
command_string은 따옴표(=)로 묶인 명령 문자열 뒤의 첫 번째 인수 로 설정됩니다.
귀하의 경우 -I
매개변수 없이 옵션을 사용했는데, 이는 xargs
읽은 값이 추가될 뿐만 아니라 호출을 통해 전달되어야 함을 의미합니다 '{}'
. 따라서 다음 중 하나를 사용하십시오.
echo 1 2 3 4 | xargs sh -c "echo \$4 \$3 \$2 \$1" command
아니면 이거
echo 1 2 3 4 | xargs -I sh -c "echo \$4 \$3 \$2 \$1" command '{}'
팁: 이상한 동작을 더 잘 추적하려면 -x
옵션 from sh
및 -t
옵션 from을 사용하십시오. xargs
실행 전에 각 명령줄을 인쇄합니다.