나는이 질문을 쓸데없는 것으로 인터넷 검색했습니다. 나는 직장에서 빌드 프로세스를 자동화하고 있는데, 내가하려고하는 것은 버전 번호와 빌드에 대한 작은 설명을 얻는 것입니다. 이것이 실행되는 시스템은 OSX 10.6.8입니다.
CAT 사용부터 필요에 따라 각 라인 처리에 이르기까지 모든 것을 보았습니다. 무엇을 사용해야하며 왜 그런지 알 수 없습니다.
시도
read -d '' versionNotes
사용자가 백 스페이스 키를 사용해야하는 경우 입력이 잘못되었습니다. 또한 ^ D는 종료되지 않고 ^ C는 프로세스를 종료하므로 입력을 종료하는 좋은 방법은 없습니다.
read -d 'END' versionNotes
작동하지만 백 스페이스 키가 필요한 경우 여전히 입력을 깨뜨립니다.
while read versionNotes
do
echo " $versionNotes" >> "source/application.yml"
done
빈 문자열과 일치하는 것을 찾기에는 너무 늦었 기 때문에 입력을 올바르게 끝내지 않습니다.
답변
man bash
«…
대체 명령 $ (cat file)은 동일하지만 더 빠른 $ (<file)로 대체 될 수 있습니다.
…»
$ myVar=$(</dev/stdin)
hello
this is test
$ echo $myVar
hello this is test
$ echo "$myVar"
hello
this is test
그리고 나는 이것이 언급 할 가치가 있다는 것에 동의합니다 echo "$myVar"
.
답변
이 시도:
user@host:~$ read -d '' x <<EOF
> mic
> check
> one
> two
> EOF
줄 바꿈 없이 :
user@host:~$ echo $x
mic check one two
와 줄 바꿈 :
user@host:~$ echo "$x"
mic
check
one
two
답변
답변
빈 줄이 생길 때까지 각 줄을 처리 하여이 문제를 해결했습니다. 내 상황에 잘 맞습니다. 그러나 누군가가 더 나은 솔루션을 추가하고 싶다면 자유롭게 그렇게하십시오.
echo "---
notes: |" > 'version.yml'
while read line
do
# break if the line is empty
[ -z "$line" ] && break
echo " $line" >> "source/application.yml"
done
답변
vim, pico와 같은 편집기를 시작할 수 있습니다 …
${VISUAL:-${EDITOR:-vi}} source/application.yml
답변
먼저 몇 가지 수정 사항 :
- 라인에서 “에디션”을 허용하려면
-e
readline을 사용하십시오. -d
하나의 문자 만 사용합니다. 예를 들어 ‘END’에서 ‘E’를 사용하고 사용자가 ‘E’를 쓸 때마다 판독이 중지됩니다 (그것이 당신이 원하는 것이 아니라고 생각합니다 …)
이를 수행 할 수있는 몇 가지 가능성이 있습니다. 한 줄씩 읽고 빈 줄을 찾으면 중지합니다 (중단 단어를 설정할 수는 있지만).
unset tmp
while :
do
read line
[[ $line == "" ]] && tmp="${tmp:0:$((${#tmp}-1))}" && break
tmp="$tmp"$line$'\n'
done
답변
몇 가지 방법이 있습니다.
가장 간단한 방법 중 하나는 다음과 같습니다.
MYVAR=$(yourcommand)
echo $"MYVAR"
예를 들면 다음과 같습니다.
MYVAR=$(ls /)
echo $"MYVAR"