함수를 내 보내면 (추천되지 않은) 기능이 수행됩니다.
export -f echo_var
seq -f "n%04g" 1 100 | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
printf
외부 대신 내장을 사용할 수 있습니다 seq
.
printf "n%04g\n" {1..100} | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
또한이를 사용 return 0
하고 exit 0
좋아하면 앞에 오는 명령으로 생성 될 수있는 모든 오류 값이 마스크됩니다. 또한 오류가 없으면 기본값이므로 약간 중복됩니다.
@phobic은 Bash 명령 을 다음과 같이 단순화 할 수 있다고 언급했습니다.
bash -c 'echo_var "{}"'
그 {}
안에서 직접 이동합니다 . 그러나 그건 명령 주입에 취약 @Sasha에 의해 지적했다.
다음은 내장 형식을 사용하지 않아야 하는 예 입니다.
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "{}"'
Sun Aug 18 11:56:45 CDT 2019
왜 안되는 또 다른 예 :
echo '\"; date\"' | xargs -I {} bash -c 'echo_var "{}"'
이것은 안전한 형식을 사용하여 출력 되는 것입니다 .
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "$@"' _ {}
$(date)
이는 주입 을 피하기 위해 매개 변수화 된 SQL 쿼리 를 사용하는 것과 비교할 수 있습니다.
내가 사용하고 date
명령 치환 또는 탈출 따옴표 여기 대신에 rm
이 비파괴 이후 사샤의 의견에 사용되는 명령.