디렉터리 트리의 모든 파일에 대해 명령을 실행하고 출력을 변수에 넣습니다.

디렉터리 트리의 모든 파일에 대해 명령을 실행하고 출력을 변수에 넣습니다.

이 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 -lBash에서 명령을 실행하는 방법은 무엇입니까 ?

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`

관련 정보