이 bash 명령을 실행하고 싶습니다.
#!/bin/bash
rep="*"
for f in `ls -R`$rep; do
d='git log '$f'| wc -l'
c=$d
echo $c
done
git log myFile | wc -l
Bash에서 명령을 실행하는 방법은 무엇입니까 ?
ps: 이 명령은 숫자를 반환합니다.git log myFile | wc -l
답변1
명령을 실행하고 출력을 얻으려면 다음 줄을 사용하십시오.
d=`git 로그`
스크립트에서 두 가지를 변경해야 합니다. 아래에 올바른 스크립트가 있습니다
#!/bin/bash 대표자="*" for f in `ls -R $rep`; d=`git log$f|화장실-l` c=$d 에코$c 완벽한
편집: 원래 수정은 출력이 d 변수로 이동하도록 따옴표를 백틱으로 변경하는 것이었습니다. 또한 $rep는 ls의 백틱 안에 있어야 합니다. 그렇지 않으면 마지막으로 처리된 파일 이름 끝에 *가 추가됩니다.
답변2
나는 이미 당신의 다른 질문에 대답했습니다find를 호출하는 bash 스크립트의 구문 오류, 그래서 이미 쓴 내용을 반복하지 않겠습니다내 대답은 거기 있어.
출력을 구문 분석하지 않습니다.ls
. ls
디렉터리의 파일을 열거하기 위해 실행할 필요가 없습니다 . find
하위 디렉터리로 재귀적으로 이동해야 하는 경우 .
출력을 얻으려면 wc -l
명령 대체에 사용하십시오.$(git log "$f" | wc -l)
변수 이름은 큰따옴표로 묶어야 합니다. 변수 및 명령 대체에는 항상 큰따옴표를 사용하십시오: "$foo"
, "$(foo)"
. 큰따옴표는 변수 값 또는 명령 출력의 셸에 의한 추가 처리를 끕니다. 따옴표가 없으면 결과는 파일 와일드카드 패턴으로 해석되는 단어로 분할됩니다. 작은따옴표를 사용하면 $
기호가 특별히 처리되지 않으므로 값 대신 git
표시됩니다 .$f
find . -type f -exec sh -c '
for x in "$@"; do
c=$(git log "$f" | wc -l)
done
' _ {} +
-exec … {} +
대신 사용하면 -exec … {} \;
중간 셸을 대량 파일당 한 번만 호출할 수 있어 약간 더 빠릅니다.
bash ≥4에서는 를 사용할 필요가 없으므로 구문을 사용하여 하위 디렉터리로 재귀 find
할 수 있습니다 .**
shopt -s globstar
for x in **/*; do
[ -f "$x" ] || continue # skip directories and other non-regular files
git log "$x" | wc -l
done
답변3
내가 아는 한 명령은 다음과 같습니다.
git log
모든 개정 내역이 표시됩니다. 이것이 사실이라면 myfile이라는 파일에 콘텐츠를 저장하려고 한 다음 파일의 줄 수를 계산하려고 하는 것 같습니다.
이것이 원하는 경우 먼저 다음을 통해 기록을 저장할 수 있습니다.
git log>myFile.txt
이제 wc -l을 사용하여 줄 수를 찾아 nOfLines.txt라는 파일에 저장해야 합니다.
그래서 당신은 이것을 해야 합니다:
wc -l<myFile.txt>nOfLines.txt
이 파일의 내용은 gitVar라는 변수에 저장됩니다.
gitVar=$(cat nOfLines.txt)
다음 명령을 사용하여 제대로 작동하는지 확인할 수 있습니다.
echo "$gitVar"
"myCommand.sh"라는 스크립트에 모든 것을 묶고, chmod a+x를 사용하여 권한을 부여하고, 명령처럼 터미널에서 스크립트를 실행하세요.
답변4
나는 당신이하고 싶어한다고 생각합니다 :
#!/bin/bash
rep="*"
for f in `ls -R`$rep; do
d='git log "$f"| wc -l'
c=$d
echo $c
done
git 명령 주위에는 작은따옴표 대신 큰따옴표가 있습니다.
더 작은 솔루션은 다음을 사용하는 것입니다.
echo `git log "$f"| wc -l`