forloop 개체에 대해 bash 명령을 실행하려고 하는데 forloop 개체를 사용하는 대신 파일을 찾으려고 합니다.
예:
입력 파일에는 다음 형식의 줄이 포함되어 있습니다.user:password
for item in $(cat myItems);do
USER = cat $item | cut -d ":" -f1
PASS = cat $item | cut -d ":" -f2
done
결과는 $item 파일을 찾을 수 없다는 것입니다.
나도 시도했다
for item in $(cat myItems);do
USER = $(cat $item | cut -d ":" -f1)
PASS = $(cat $item | cut -d ":" -f2)
done
답변1
파일의 각 줄에 대해 일부 명령을 실행해야 하는 경우 다음과 같이 작성할 수 있습니다.
while IFS=: read -r user password rest_ignored; do
something with "$user" and "$password"
done < myItems
cat
var=value
은 할당 구문 주위에 공백 없이 파일을 연결하는 명령입니다 =
. $(...)
줄 바꿈에서 명령 출력을 분할하는 것이 가능하지만 올바르게 설정 $IFS
하고 와일드카드를 비활성화한 경우에만 가능합니다.
답변2
이것은 당신이 원하는 것을 달성하고 원래 원했던 스크립팅 접근 방식을 유지하는 것 같습니다.
$ cat myItems
user:pass
user2:pass2
$ for item in $(cat myItems);do
USER=$(echo $item | cut -d ":" -f1)
PASS=$(echo $item | cut -d ":" -f2)
echo user $USER pass $PASS
done
user user pass pass
user user2 pass pass2
$