![쉘 명령을 파일로 출력하고 명령을 실행합니다.](https://linux55.com/image/159091/%EC%89%98%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B3%A0%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%A9%EB%8B%88%EB%8B%A4..png)
명령을 파일로 출력하는 것 외에 명령 자체를 어떻게 출력할 수 있습니까?
나도 할 수 있다는 걸 알아쉘 스크립트에서 화면과 파일에 텍스트를 출력하는 방법은 무엇입니까?출력을 캡처합니다. 내 사용 사례는 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
. 그런 다음 중괄호 그룹 내에서 두 명령을 실행합니다 {}
.
pytest
문자열과 공백으로 연결된 인수( 의 기본 첫 번째 문자$IFS
) 를 인쇄합니다 .pytest
주어진 매개변수를 사용하여 실제 명령을 실행합니다.
그러면 중괄호 그룹이 이전과 같이 리디렉션됩니다.
답변2
sh -v <<< 'pytest /awesome_tests -k test_quick_tests -n auto' \
&> test_output_$(date -u +"%FT%H%MZ").txt
sh -v
sh
각 명령줄이 에 에코 되므로 stderr
이미 출력 파일을 캡처했으므로 해당 옵션을 사용하고 실행하려는 명령을 제공하기 stderr
만 하면 됩니다 .-v
sh
내 테스트에서는 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
그 <<<
목적입니다.