YII_ENV=prod yii kw/test
열 번 달리고 싶어요 . 나는 노력했다
$ YII_ENV=prod for x in 1..10 do; yii kw/test done;
-bash: for: command not found
1304682651
(한 번은 실행해본 것 같습니다.) 저도 시도해 봤습니다.
$ for x in {1..10} do; YII_ENV=prod yii kw/test done;
-bash: syntax error near unexpected token `YII_ENV=prod'
GNU bash, 버전 4.3.39(2)-릴리스(i686-pc-cygwin)
답변1
명령 기간 동안 환경 변수를 설정하는 구문은 명령이 간단한 명령인 경우에만 작동합니다(보다 정확하게는 유사하게 작동하는 외부 명령 또는 내장 명령 - 참조).VARIABLE=VALUE COMMAND
필드 분할을 위해 언제 임시 IFS를 사용할 수 있습니까?자세한 내용은). for 루프와 같은 복잡한 명령과 함께 사용할 수 없습니다.
첫 번째 시도는 for
명령의 첫 번째 단어가 아니기 때문에 실패하므로 키워드로 구문 분석되지 않으므로 bash는 for
for 루프를 구문 분석하는 대신 호출된 명령을 찾습니다. 두 번째 시도는 루프의 간단한 구문 오류로 인해 실패합니다. 앞에 세미콜론이나 개행 문자가 필요합니다 . 그렇지 않으면 키워드로 인식되지 않기 do
때문입니다 . do
또한 앞에는 세미콜론이 필요합니다 done
.
for x in {1..10}; do YII_ENV=prod yii kw/test; done
루프 중에 변수를 설정하려면 이전 값을 덮어쓰는 것이 중요하지 않은 경우 변수를 설정하고 나중에 설정을 해제하면 됩니다.
export YII_ENV=prod
for x in {1..10}; do yii kw/test; done
unset YII_ENV
또는 하위 쉘에서 루프를 실행하십시오. 루프가 쉘 환경을 수정해서는 안 되는 경우에만 이 옵션을 사용하십시오.
(
export YII_ENV=prod
for x in {1..10}; do yii kw/test; done
)
또는 함수 내에서 루프를 실행하고 변수를 함수에 로컬로 만듭니다. 이를 위해서는 bash, ksh 또는 zsh가 필요하며 이는 일반 sh에서는 작동하지 않지만 {...}
구문에는 어쨌든 그러한 요구 사항이 있습니다.
call_yii () {
typeset YII_ENV=prod
export YII_ENV
for x in {1..10}; do yii kw/test; done
}
답변2
먼저 명령 구문을 수정하여 세미콜론을 올바르게 배치하세요. 바꾸다:
for x in 1..10 do; yii kw/test done;
사용(올바른 중괄호 확장 추가):
for x in {1..10}; do yii kw/test; done
그런 다음 변수를 추가합니다.
for x in {1..10}; do YII_ENV=prod yii kw/test; done