rtool 설치 후 bash/cygwin이 손상되었습니까?

rtool 설치 후 bash/cygwin이 손상되었습니까?

대개는 나 자신(및 Google)이 알아낼 수 있습니다. 그런데 최근 이런 이상한 현상 때문에 혼란스러워졌습니다.

배경: 저는 파일 처리를 위해 일련의 스크립트를 사용합니다(Windows에서는 Cygwin에서. 스크립트는 OS X에서도 gnu baseutil을 사용하여 실행됩니다). 설치한지 하루만에실시간 도구, 내 스크립트가 작동을 멈췄습니다. 우여곡절 끝에 드디어 문제를 발견했습니다.

문제: 다음 줄이 있습니다.

key=$( echo "$foo" | tr -d - | tr '[:upper:]' '[:lower:]' )

$foo또 다른 텍스트 변수입니다 . 대시를 제거 $foo하고 소문자로 변환했습니다. 스크립트는 수천 번 실행되었습니다.

하지만 더 이상은 아닙니다. 내가 달리면

echo "Blah-Bleh" | tr -d - | tr '[:upper:]' '[:lower:]'

나는 blahbleh이것이 예상되는 것을 이해합니다. 하지만 내가 그렇게 한다면

a=$(echo "Blah-Bleh" | tr -d - | tr '[:upper:]' '[:lower:]')
echo $a

나는 아무것도 얻지 못했습니다. $a비어 있고 [[ -z $a ]] 가 반환됩니다 true. 그러나 구식 백틱으로 되돌리면 명령이 다시 작동합니다.

a=`echo "Blah-Bleh" | tr -d - | tr '[:upper:]' '[:lower:]'`
echo $a

주어진 blahbleh.

지금 나는할 수 있는모든 명령 대체를 이전 스타일로 대체했지만 이는 솔루션이라기보다는 해결 방법에 가깝습니다. 그렇다면 StackExchanger 동료 여러분, 제가 무엇을 놓쳤으며 어떻게 해결해야 할까요? 정말 짜증나.

PS 지금까지 내 진단은 다음과 같습니다.

  • Rtools를 제거해도 도움이 되지 않습니다.
  • 기계를 다시 시작해도 도움이 되지 않았습니다.
  • 다시 설치모든Cygwin 패키지는 도움이 되지 않습니다.
  • bash버전은 4.3.42(4)입니다.
  • ~/.bashrc이제 , ~/.bash_profile, 에는 아무것도 없습니다 ~/.profile. Rtools 이전에는 확실하지 않습니다./etc/profile/etc/bash.bashrc
  • 문제가 무엇인지 알 수 없습니다 $PATH.

답변1

글쎄, 많은 조작과 당김 끝에 Cygwin을 다시 작동 순서로 되돌릴 수 있었습니다. 이것이 내가 한 일입니다:

  1. 제거된 Rtools
  2. Cygwin/Rtools 관련 항목의 Windows %PATH%를 지웁니다.
  3. 캐시에서 모든 Cygwin 패키지를 다시 설치했습니다.
  4. 재설계된 Cygwin;
  5. 필요 이상으로 컴퓨터를 다시 시작했습니다.

다시 일터로 복귀하라...

추신. Cygwin이 다시 작동했지만 bash 배열에 값을 할당하는 원래 줄이 더 이상 올바른 결과를 생성하지 않는다는 것을 발견했습니다. 이것을 바꿔야 해

read -r -a array <<<$(printf $string)

이와 관련하여

array=($(printf $string))

작동하게 만들다. bash 업데이트여야 합니다. 그래야 합니다.

답변2

귀하의 파이프라인이 예상대로 작동하지 않는 이유는 잘 모르겠지만 더 잘 수행할 수 있다는 것은 알고 있습니다.

a='Blah-Bleh'
a=${a//-/}; a=${a,,}
printf '%s\n' "$a"

이는 내장 대체를 사용하며 bash명령 대체보다 빠릅니다. 첫 번째 는 a=${a//-/}의 모든 대시를 제거 $a하고 두 번째는 a=${a,,}전체 문자열을 소문자로 만듭니다.

bash이는 4.0 이상에서 작동합니다.

관련 정보