다음 스크립트가 작동하지 않는 이유가 궁금합니다.
#!/bin/bash
read -p 'First lets write PROMPT.SH'
echo '#!/bin/bash'>prompt.sh
echo "export PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '">>prompt.sh
read -p "Change Title and Prompt"
source prompt.sh
echo texttexttext
read -p "Now lets tidy up PROMPT.SH"
rm ./prompt.sh
read -p "That was the program"
제가 하려는 작업은 평소에 할 수 있는 창 제목, 프롬프트, 텍스트 색상을 변경하는 것입니다.
PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '
일반 bash 세션 중에는 스크립트에 추가한 다음 스크립트를 실행할 때는 그렇지 않습니다.
답변1
PS1
대화형 프롬프트에만 표시됩니다. 에 대해 표시된 프롬프트와는 아무 관련이 없습니다 read -p
. 입력을 읽는 경우에도 bash 스크립트 실행은 고려되지 않습니다.인터렉티브.
답변2
무엇을 하려는지 명확하지 않지만 PS1
스크립트에서 대화형 셸을 설정하는 것 같습니다. 그렇게 말하면, 당신은 그것을 할 수 없습니다. *nix 및 Unix 계열 시스템에서는 프로세스 특성/속성이 상위에서 하위로 전달되지만 그 반대 방향으로는 전달되지 않습니다. 예를 들어 를 PATH
포함하도록 설정한 /foo
다음 실행을 시도하는 스크립트를 실행하면 bar
검색되지만 스크립트를 /foo/bar
변경하면 PATH
대화형 셸에 영향을 주지 않습니다. 마찬가지로 cd
및 umask
. 이는 Windows 명령 프롬프트(배치) 환경과의 차이점입니다.
즉, 답이 있고 여러분은 이미 답을 알고 있습니다. 스크립트(10줄 스크립트)가 호출되면 를 andy.sh
입력하여 원하는 효과를 얻을 수 있습니다 source andy.sh
. 그러나 그것은 어리석은 과잉입니다(단지 스크립트 작성 연습을 위해 수행하지 않는 한). 그냥 넣어
PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '
에 입력 drew.sh
하고 source drew.sh
.
그러나 alias
명령도 연구하십시오.