한 줄에 동일한 매개변수를 사용하여 두 개의 명령을 실행합니다.

한 줄에 동일한 매개변수를 사용하여 두 개의 명령을 실행합니다.

파일을 한 줄씩 구문 분석하고 그 안에 있는 값을 FreeBSD의 2개 명령에 전달해야 합니다 sh(다른 쉘은 사용할 수 없음).

내 계획은 다음을 사용하는 것 xargs입니다 su.

whatever_outputs_values | xargs -I {} su `whoami` -c "cmd1 {}; cmd2 {}"

FreeBSD에서는 su동일한 사용자에게 비밀번호가 필요하지 않습니다. 이는 비록 느리기는 하지만 터미널에서 제대로 작동하고 올바른 결과를 생성합니다. 하지만 프로그램 코드에서 실행해야 하는데 명령이 중단됩니다. SSH 라이브러리가 내가 볼 수 없는 상황으로 인해 비밀번호가 입력될 때까지 기다리게 하기 때문에 작동이 중단될 것이라고 99% 확신합니다. 그래서 저는 su whoami비밀번호를 기다리지 않는다는 것을 보장하는 대안을 찾고 있습니다 . 아마도 루프일 수도 있지만 forLinux 배경에서는 작업 루프를 bash디자인할 수 없습니다 .forsh

답변1

하지만 나는 su이것을 사용하지 않을 것이다 sh -c. 이렇게 하면 이식성이 향상되고 아마도 조금 더 빨라질 것입니다. 또한 왼쪽에 명령의 출력을 주입하는 것을 피하겠습니다.코드로오른쪽에 쉘 명령어를 입력하세요(코드 주입 취약점입니다).

some-command | xargs -I {} sh -c 'cmd1 "$1"; cmd2 "$1"' sh {}

sh -c이는 매번 하나의 매개변수를 사용하여 인라인 스크립트를 여러 번 호출합니다 . 이 매개변수는 cmd1및 를 호출하는 데 사용됩니다 cmd2.

이 매개변수는 인라인 스크립트 내부에 sh전달되는 "더미" 매개변수입니다 . $0이는 스크립트 또는 셸의 이름이어야 하며 셸에서 생성된 오류 메시지(예: 명령을 찾을 수 없는 경우 등)에 사용됩니다.

관련 정보