내가 얻는 것 :
host:~ user$ cat example.txt
some texthost:~ stas$
내가 얻고 싶은 것 :
host:~ user$ cat example.txt
some text
host:~ stas$
cat
이렇게 행동 할 수있는 방법 이 있습니까?
Mac OS X에서 bash를 사용하고 있습니다.
내가 얻는 것 :
host:~ user$ cat example.txt
some texthost:~ stas$
내가 얻고 싶은 것 :
host:~ user$ cat example.txt
some text
host:~ stas$
cat
이렇게 행동 할 수있는 방법 이 있습니까?
Mac OS X에서 bash를 사용하고 있습니다.
답변:
대부분의 유닉스 도구는 텍스트 파일과 잘 작동하도록 설계되었습니다. 텍스트 파일은 일련의 줄로 구성됩니다. 줄은 줄 바꿈 문자로 끝나는 일련의 인쇄 가능한 문자로 구성됩니다. 특히 비어 있지 않은 텍스트 파일의 마지막 문자는 항상 줄 바꿈 문자입니다. 분명히 마지막 개행 문자 example.txt
가 포함되어 some text
있지 않으므로 텍스트 파일이 아닙니다.
cat
간단한 일을한다. 임의의 파일을 텍스트 파일로 변환하는 것은 해당 작업의 일부가 아닙니다. 다른 도구는 항상 입력을 텍스트 파일로 바꿉니다. 표시하는 파일이 줄 바꿈으로 끝나는 것이 확실하지 않으면 awk 1
대신 대신 실행하십시오 cat
.
이전 명령이 마지막 여백 이외의 다른 곳에 커서를 둔 경우 bash가 다음 줄에 프롬프트를 표시하도록 할 수 있습니다. 이것을 .bashrc
( Dennis Williamson 의 제안 에 대한 GetFree 의 변형) 에 넣으십시오 .
shopt -s promptvars
PS1='$(printf "%$((COLUMNS-1))s\r")'$PS1
PROMPT_COMMAND
가져와야하고 0이 아닌 경우 개행 ( \n
)을 첫 번째 문자로 사용하십시오 PS1
.
@Gilles의 대답을 사용하기 시작했지만 터미널이 열 수를 변경하면 프롬프트가 더 이상 예상대로 줄의 시작 부분에 있지 않다는 것을 알았습니다. 이것은 tmux / screen splits, GUI 컨테이너의 수동 크기 조정, 글꼴 변경 등 다양한 이유로 발생할 수 있습니다.
내가 정말로 원했던 것은 터미널이 첫 번째 열 이외의 다른 곳에서 프롬프트를 인쇄하기 시작하면 줄 바꿈을 추가하는 것입니다. 이렇게하려면 현재 열을 얻는 방법을 알아야했습니다. 이 답변을 사용 했습니다. . 을 . 최종 작업 프롬프트 구성은 다음과 같습니다.
###
# Configure PS1 by using the old value but ensuring it starts on a new line.
###
__configure_prompt() {
PS1=""
if [ "$(__get_terminal_column)" != 0 ]; then
PS1="\n"
fi
PS1+="$PS1_WITHOUT_PREPENDED_NEWLINE"
}
###
# Get the current terminal column value.
#
# From /programming//a/2575525/549363.
###
__get_terminal_column() {
exec < /dev/tty
local oldstty=$(stty -g)
stty raw -echo min 0
echo -en "\033[6n" > /dev/tty
local pos
IFS=';' read -r -d R -a pos
stty $oldstty
echo "$((${pos[1]} - 1))"
}
# Save the current PS1 for later.
PS1_WITHOUT_PREPENDED_NEWLINE="$PS1"
# Use our prompt configuration function, preserving whatever existing
# PROMPT_COMMAND might be configured.
PROMPT_COMMAND="__configure_prompt;$PROMPT_COMMAND"
__get_terminal_column
않습니까?
PS1="\n"
나는 단지 echo
수정할 필요가 없다 PS1
.
이에 대한 문제는 example.txt에 파일 끝에 줄 바꿈이 없기 때문일 수 있습니다.
cat
.
example.txt
파일 끝에 줄 바꿈 이없는 대답이 아닙니다. 질문의 요점입니다.
를 사용한다고 주장 cat
하면 끝에 줄 바꿈이 있거나없는 두 가지 유형의 파일 모두에서 작동합니다.
echo "`cat example.txt`"
당신은 당신의 선택 (심지어의 이름과 기능으로 바꿀 수 있습니다 cat
) 당신의 .bashrc
:
cat1(){ echo "`/bin/cat $@`";}
.bashrc에 추가 할 수 있습니다
PROMPT_COMMAND="printf '\n';$PROMPT_COMMAND"
나를 위해 작동합니다.
cat
하므로이 문제가 다시 나를 귀찮게하기 시작할 때 마지막 수단으로 이것을 사용할 것입니다.