/home/user/.envfile
프롬프트 에 PS1
날짜/시간 등이 표시되도록 약간 수정했습니다 pwd
.
로 변경:
# `who am i` is used to obtain the name of the original user
case `who am i | awk '{print $1}'` in
'someuser')
#set the prompt to include the date and time
set -o allexport
unset _Y _M _D _h _m _s
eval $(date "+_Y=%Y;_M=%m;_D=%d;_h=%H;_m=%M;_s=%S")
((SECONDS = 3600*${_h#0}+60*${_m#0}+${_s#0}))
typeset -Z2 _h _m _s
_tsub="(_m=(SECONDS/60%60)) == (_h=(SECONDS/3600%24)) + (_s=(SECONDS%60))"
_timehm='${_x[_tsub]}$_h:${_m}'
_timehms='${_x[_tsub]}$_h:$_m:${_s}'
_timedhms=$_Y'/'$_M'/'$_D" "'${_x[_tsub]}$_h:$_m:${_s}'
_hn=`hostname`
typeset -u _hn
# `whoami` is used here to display the name of the 'su' user
_un=`whoami | awk '{print $1}'`
typeset -u _un
export PS1="$_timedhms
"'['$_un']'$_hn':${PWD#$HOME/} $ '
set +o allexport
;;
*)
;;
esac
프롬프트는 다음과 같아야 합니다.
2014/08/07 11:08:24
[su'd username]hostname:/home/username $
보시다시피 이는 whoami
프롬프트에 현재 사용자의 이름을 표시하는 데 사용됩니다.
이 계정을 통해 실행되는 프로세스 중 일부에 대해 불만이 있습니다.
who: 0551-012 The process is not attached to a terminal.
Do not run who am i as a background process.
Usage: who [-AabdHilmpqrsTtuwX?] [am {i,I}] [utmp_like_file]
이 수정 사항이 다른 프로세스에 영향을 미치는 것을 방지할 수 있는 방법이 있습니까? 프로세스가 터미널에 연결되지 않은 경우를 감지하여 가능합니까?
답변1
스티그리고 이전 버전나는 누구인가tty 장치에 연결되지 않은 경우 오류 메시지가 발행됩니다. 표준 입력(fd 0)을 확인하세요. 어떤 파일 설명자를 확인해야 할지 stty
모르겠습니다 . 이러한 오류 메시지를 받지 않으려면 일반적인 해결 방법은 다음 옵션을 who
사용하는 것입니다.-t
시험(일반적으로 [
) 쉘이 tty에 연결되어 있는지 확인합니다.
if [ -t 0 ]
then
ID=`who am i | awk '{print $1}'`
else
ID="unknown"
fi
귀하의 경우 if
PS1은 tty에서 작업할 때만 의미가 있으므로 해당 명령문에 PS1 변수를 설정하는 전체 논리를 포함할 수 있습니다.
test
위 링크의 설명과 관련된 부분은 다음과 같습니다.
-t 파일 설명자
파일 설명자 file_descriptor가 열려 있고 터미널과 연결되어 있으면 참입니다. file_descriptor가 유효한 파일 설명자 번호가 아니거나 파일 설명자 번호 file_descriptor가 열려 있지 않거나 열려 있지만 터미널과 연결되어 있지 않으면 False입니다.
답변2
귀하의 스크립트는 처음으로 사용하지 who
않습니다 whoami
. 변경하면 원하는 결과를 얻을 수 있습니다.