위치 매개변수 전달

위치 매개변수 전달

나는 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에 대한 지정은 경고 및 오류 메시지에 사용되는 쉘의 이름을 설정합니다.

$0command_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실행 전에 각 명령줄을 인쇄합니다.

관련 정보