내가 얻는 것 :
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하므로이 문제가 다시 나를 귀찮게하기 시작할 때 마지막 수단으로 이것을 사용할 것입니다.