문제

도했는 다양한 형태의에서는 다음을 강타 스크립트:

#!/bin/bash
svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"

그러나 나는 얻을 수 없습니다 이 구문을 정확하게 확대 COLUMNS 환경 변수입니다.

도했는 다양한 형태의 다음과 같다:

svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W $COLUMNS'

svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W ${COLUMNS}'

eval svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"

제안이 있습니까?

도움이 되었습니까?

해결책

확실하지 않은 경우 터미널에서 'Cols'요청을 사용하고 열을 잊어 버릴 수 있습니다.

COLS=$(tput cols)

다른 팁

그냥 빠른 메모/요약하는 사람이 여기에 왔을 통해 구글에 대한 답을 찾고있는 일반적인 질문에 제목(나)이었다.다음과 같은 작동에 대한 액세스 권한을 얻을 쉘 변수는 따옴표 안의:

echo "$VARIABLE"
echo "${VARIABLE}"

용의 단일 지수는 주요 문제입니다.에 따라 Bash 참조 설명서:

바깥쪽의 문자에서 따옴표(')의 글자 그대로의 의미를 보존 각 문자에서 따옴표입니다.하나의 견적서 발생하지 않을 수 있습니다 간에 단일 지수,심지어 경우 백슬래쉬를 앞에.[...] 바깥쪽의 문자에서 따옴표(")의 글자 그대로의 의미를 보존한 모든 문자에서 따옴표를 제외하고, $, `, \, 고,역사의 확장 사용 !.캐릭터 $ 과`특별한 의미를 유지에 쌍따옴표(참조하십시오 쉘 확장).백슬래쉬는 특별한 의미를 경우에만 따라 다음 중 하나에 의해 문자: $, `, ", \, 또는 줄 바꿈.에 백슬래쉬 뒤에 있으로 이러한 문자의 하나이 제거됩니다.백슬래쉬가 이전 문자없이 특별한 의미를 수정되지 않고 남아있습니다.더블 견적을 인용 수 있습니다 내에서 쌍따옴표로 앞에 백슬래시입니다.사용 가능한 경우,역사,확장 될 것입니다 수행지 ! 에 나오는 따옴표는 이스케이프를 사용하여 백슬래시입니다.백슬래시 이전 ! 가 제거되지 않습니다.특별한 매개변수 *@ 특별한 의미를 담고 있는 경우 큰 따옴표(참조하십시오 매개변수 확장).

에서 특정한 경우에 묻는 질문,$열 특별한 변수가 있는 비표준 특성(볼 lhunath 의 대답이 있습니다.)

주목하십시오 COLUMNS 이다:

  1. 아니다 환경 변수. Bash 자체에 의해 설정된 일반적인 bash 매개 변수입니다.
  2. a를 수신하면 자동으로 설정합니다 SIGWINCH 신호.

두 번째 요점은 일반적으로 당신을 의미합니다 COLUMNS 변수는 귀하에게만 설정됩니다 인터렉티브 껍데기, ~ 아니다 배쉬 스크립트에서.

스크립트 인 경우 stdin 터미널에 연결되면 터미널에게 물어 보면서 터미널의 너비를 수동으로 조회 할 수 있습니다.

tput cols

SVN 명령에서 이것을 사용하려면 :

svn diff "$@" --diff-cmd /usr/bin/diff -x "-y -w -p -W $(tput cols)"

(참고 : 당신은해야합니다 인용하다 "$@" 그리고 멀리 떨어져 있습니다 eval ;-))

다음 스크립트는 여러 값에 대해 저에게 작동합니다. $COLUMNS. 당신이 설정하지 않는지 궁금합니다 COLUMNS 이 전화 전에?

#!/bin/bash
COLUMNS=30
svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"

당신은 에코 할 수 있습니까? $COLUMNS 스크립트 내부에서 올바르게 설정되었는지 확인하십시오.

당신은 제대로하고 있습니다. 그래서 나는 다른 것이 잘못되었다고 생각합니다 (열이 아님?).

이러한 사례를 디버깅하는 요령은 전문 명령 (프로그래밍 언어를위한 폐쇄)을 만드는 것입니다. Diff-Columns라는 이름의 쉘 스크립트를 작성하십시오.

exec /usr/bin/diff -x -y -w -p -W "$COLUMNS" "$@"

그리고 그냥 사용하십시오

svn diff "$@" --diff-cmd  diff-columns

이렇게하면 코드가 더 깨끗하고 더 모듈 식 (하향식 접근법)이며 Diff-Column 코드를 별도로 테스트 할 수 있습니다 (상향식 접근).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top