내가 얻는 것:
host:~ user$ cat example.txt
some texthost:~ stas$
내가 원하는 것:
host:~ user$ cat example.txt
some text
host:~ stas$
cat
내가 이렇게 행동 할 수 있는 방법이 없을까 ?
저는 Mac OS X에서 bash를 사용하고 있습니다.
답변1
나는 다음 접근 방식을 선호합니다 ...
cat example.txt ; echo
example.txt
이는 내용을 평가 하거나 가끔 개행 문자를 추가하지 않습니다 . cat이 완료되면 기억하기 쉬운 개행 문자만 반영하며, 강한 참조나 약한 참조를 올바르게 사용했는지 아무도 생각하지 않습니다.
실제로 유일한 단점은 파일에 자체적인 후행 개행 문자가 있는 경우 추가 개행 문자를 얻게 된다는 것입니다.
답변2
대부분의 UNIX 도구는 텍스트 파일과 잘 작동하도록 설계되었습니다. 텍스트 파일은 일련의 줄로 구성됩니다. 행은 개행 문자로 끝나는 일련의 인쇄 가능한 문자로 구성됩니다. 특히 비어 있지 않은 텍스트 파일의 마지막 문자는 항상 개행 문자입니다. 분명히 example.txt
여기에는 마지막 줄 바꿈 없이 만 포함되어 있으므로 some text
텍스트 파일이 아닙니다.
cat
간단한 작업을 수행하는 것은 임의의 파일을 텍스트 파일로 변환하는 작업의 일부가 아닙니다. 일부 다른 도구는 항상 입력을 텍스트 파일로 변환합니다. 표시되는 파일이 줄바꿈으로 끝나는지 확실하지 않은 awk 1
경우 cat
.
이전 명령이 마지막 여백을 넘어 커서를 떠난 경우 bash가 다음 줄에 프롬프트를 표시하도록 할 수 있습니다. 이것을 당신의 .bashrc
(변형무료로 받으세요제안의저자: 데니스 윌리엄슨):
shopt -s promptvars
PS1='$(printf "%$((COLUMNS-1))s\r")'$PS1
답변3
@Gilles의 답변을 사용하기 시작했지만 터미널이 열 수를 변경하면 프롬프트가 예상대로 더 이상 줄 시작 부분에 없다는 것을 발견했습니다. 이는 tmux/화면 분할, 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 https://stackoverflow.com/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"
답변4
을 고집하면 cat
끝에 개행 문자가 있든 없든 두 가지 유형의 파일 모두에서 작동합니다.
echo "`cat example.txt`"
cat
원하는 이름을 가진 함수 로 변환할 수 있습니다 (짝수) .bashrc
.
cat1(){ echo "`/bin/cat $@`";}