쉘 명령을 파일로 출력하고 명령을 실행합니다.

쉘 명령을 파일로 출력하고 명령을 실행합니다.

명령을 파일로 출력하는 것 외에 명령 자체를 어떻게 출력할 수 있습니까?

나도 할 수 있다는 걸 알아쉘 스크립트에서 화면과 파일에 텍스트를 출력하는 방법은 무엇입니까?출력을 캡처합니다. 내 사용 사례는 pytest에만 해당됩니다.

pytest /awesome_tests -k test_quick_tests -n auto &> test_output_$(date -u +"%FT%H%MZ").txt

결과가 어떤 용도로 사용되는지 정확히 알 수 있도록 출력에서 ​​명령을 실행하는 것이 정말 도움이 됩니다.

답변1

&>또 다른 옵션은 시작한 리디렉션 에 bash를 사용하는 것입니다. 그렇지 않으면 sh와 호환됩니다.

set -- '/awesome_tests' '-k' 'test_quick_tests' '-n' 'auto'
{ printf '%s %s\n' 'pytest' "$*";
  pytest "$@";
} &> test_output_$(date -u +"%FT%H%MZ").txt

이는 명령의 인수를 포함하도록 위치 인수를 설정합니다 pytest. 그런 다음 중괄호 그룹 내에서 두 명령을 실행합니다 {}.

  1. pytest문자열과 공백으로 연결된 인수( 의 기본 첫 번째 문자 $IFS) 를 인쇄합니다 .
  2. pytest주어진 매개변수를 사용하여 실제 명령을 실행합니다.

그러면 중괄호 그룹이 이전과 같이 리디렉션됩니다.

답변2

sh -v <<< 'pytest /awesome_tests -k test_quick_tests -n auto' \
    &> test_output_$(date -u +"%FT%H%MZ").txt

sh -vsh각 명령줄이 에 에코 되므로 stderr이미 출력 파일을 캡처했으므로 해당 옵션을 사용하고 실행하려는 명령을 제공하기 stderr만 하면 됩니다 .-vsh

내 테스트에서는 sh -v -c 'your-command-here'이것이 작동하지 않았습니다.

echo 'pytest /awesome_tests -k test_quick_tests -n auto' | \
    sh -v &> test_output_$(date -u +"%FT%H%MZ").txt

그것은 효과가 있지만 echo ... |그것이 바로 bash<<<목적입니다.

관련 정보