9개의 Robot Framework 테스트 파일이 포함된 폴더가 있습니다. 그 중 8개만 실행하면 됩니다. 마지막 것은 다른 모든 것을 설정하는 데 사용되기 때문입니다(우리는 이것을 이라고 부릅니다 config.robot
).
이 모든 테스트를 실행해야 한다면 다음과 같은 작업을 수행할 것입니다.
for test_file in folder/*.robot; do
robot -b debug.log -d log/ $test_file.robot;
done
하지만 이 경우에는 실행도 가능하다는 뜻인데 config.robot
, 이는 제가 원하지 않습니다.
하나를 제외하고 폴더의 모든 파일에 대해 for 루프를 수행하는 방법은 무엇입니까?
이것이 도움이 된다면, config.robot
제외한 모든 파일은 다음 명명 구문을 따릅니다. 모두 실행 순서로 시작하고 그 뒤에 실제 이름이 옵니다 01__init-connection.robot
.
편집하다:이 질문을 게시하기 전에 제공된 답변을 보고 시도했습니다.전역 일치에서 패턴 제외그리고 다음과 같은 것을 썼다
shopt -s extglob
for test_file in folder/!(config).robot; do ...
그러나 Robot Framework는 파일 이름을 인식하지 못합니다.
Parsing 'folder/!(config).robot' failed: Data source does not exist.
그래서 로봇 프레임워크는 이 구문을 좋아하지 않는 것 같습니다.
내 파일 이름 구조와 일치하는 정규식을 기반으로 찾기 결과를 사용하여 변수를 설정한 다음 해당 변수에 대해 for 루프를 수행하려고 합니다.
SUITES=$(find . -regex '^[0-9][0-9][a-zA-Z_-]*')
for SUITE in $SUITES; do robot -b ...
그러나 어떤 이유로 내가 echo
욕실에 있을 때는 아무것도 반환하지 않습니다. 내가 여기서 무엇을 놓치고 있는지 모르겠습니다.
답변1
Bash에서 태그는 다음과 같습니다.
shopt -s extglob
for test_file in folder/!(config).robot; do robot -b debug.log -d log/ "$test_file".robot; done
응답 업데이트:
shopt -s extglob for test_file in folder/!(config).robot; do ...
다음으로 이어진다:
'folder/!(config).robot' 구문 분석 실패: 데이터 소스가 존재하지 않습니다.
"폴더"에 "config.robot" 외에 ".robot" 파일이 없는 경우 이러한 현상이 발생할 수 있습니다. 고려하다:
$ mkdir folder
$ touch folder/config.robot
$ shopt -s extglob
$ shopt -u nullglob
$ for f in folder/!(config).robot; do ls --- "$f"; done
ls: cannot access folder/!(config).robot: No such file or directory
대비(새로운 시작):
$ mkdir folder
$ touch folder/config.robot
$ shopt -s extglob
$ shopt -s nullglob
$ for f in folder/!(config).robot; do ls -- "$f"; done
$
여기서 for
와일드카드는 어떤 파일로도 확장되지 않기 때문에 루프는 명령을 실행하지 않습니다.
아니면 대안으로예비config.robot 파일은 다음과 같습니다.
$ mkdir folder
$ touch folder/config.robot
$ touch folder/01__init-connection.robot
$ shopt -s extglob
$ shopt -s nullglob
$ for f in folder/!(config).robot; do ls -- "$f"; done
folder/01__init-connection.robot
답변2
이 명령을 사용할 수 있습니다 continue
.
또한 이 변수는 전체 경로를 선택한다는 점에 유의하세요.
for f in folder/*.robot; do
test "$f" = folder/config.robot && continue
robot -b debug.log -d log/ "$f"
done
답변3
이 시도,
for test_file in folder/*.robot;
do
[ "$test_file" != "config.robot" ] && robot -b debug.log -d log/ $test_file.robot;
done
robot
$test_file
다음과 같지 않은 경우에만 실행됩니다.config.robot
또는 단순히 사용find
find folder/*.robot ! -name "config.robot" -exec robot -b debug.log -d log/ {} +