좋습니다. 명령줄에서 환경 변수를 표시할 수 있습니다.
echo $COLUMNS
그리고 응답을 받으세요.
하지만 쉘 스크립트에서는 실행할 수 없으며 아무것도 얻지 못합니다. 따라서 해당 환경 변수를 가져오는 방법이 있어야 하지만 간단한 솔루션/설명을 찾을 수 없습니다.
옛날에 비슷한 내용을 본 기억이 있는데 $ENV_COLUMNS
, 내용이 틀렸거나(혹은 뭔가 빠졌던) 내용이었습니다.
나는 다음과 같은 것을 시도하고 있습니다 :
for x in $COLUMNS
do echo -n "-"
done
echo #to get the /n
답변1
당신이 해야 할 일:
COLUMNS=$COLUMNS my_script
다음에서 유사한 재정의를 수행할 수도 있습니다 sed
.
STTY=
for fd in 0 1 2
do [ -t "$fd" ] &&
break
done|| ${STTY:?Run "$0" on a terminal}
STTY=$( stty -a <&"$fd" |
sed -Ee'/;/{s/^/;/' \
-e's/((; *[^ ;]* )[= ]*)?([^;])/\2\\\3/g' \
-e's/; *([^ ;]+) ([^;]*)/\n\1=\2/g' \
-e's/;* *$//;t' -e\} \
-e'H;$!d;x;s/[[:space:]]+/,/g' \
-e's/^,*/FLAGS=/;s/,*$//')
내 컴퓨터에(이 터미널에서)다음 값을 입력하십시오 $STTY
.
speed=\3\8\4\0\0\ \b\a\u\d
rows=\4\3
columns=\1\0\9
line=\0
intr=\^\C
quit=\^\\
erase=\^\H
kill=\^\U
eof=\^\D
eol=\<\u\n\d\e\f\>
eol2=\<\u\n\d\e\f\>
swtch=\<\u\n\d\e\f\>
start=\^\Q
stop=\^\S
susp=\^\Z
rprnt=\^\R
werase=\^\W
lnext=\^\V
discard=\^\O
min=\1
time=\0
FLAGS=-parenb,-parodd,-cmspar,cs8,-hupcl,-cstopb,cread,-clocal,-crtscts,-ignbrk,-brkint,-ignpar,-parmrk,-inpck,-istrip,-inlcr,-igncr,icrnl,ixon,-ixoff,-iuclc,-ixany,-imaxbel,iutf8,opost,-olcuc,-ocrnl,onlcr,-onocr,-onlret,-ofill,-ofdel,nl0,cr0,tab0,bs0,vt0,ff0,isig,icanon,iexten,echo,echoe,echok,-echonl,-noflsh,-xcase,-tostop,-echoprt,echoctl,echoke,-extproc
...이것은 안전해야 eval
하지만 약간 과잉일 수 있습니다.
답변2
너는 시도해 볼 수도 있다
export COLUMNS
바라보다이것설명을 위해.
하지만 이 스크립트가 어떻게 호출되는지 알려주셔야 합니다. crontab에 의해 시작된 경우에는 확인하는 COLUMNS
데 사용할 수 없습니다.printenv
답변3
이것은 지난 질문에 대한 후속 질문입니다. 우리는 귀하가 무엇을 하고 싶은지 파악하려고 노력하고 있습니다. 다른 사람들도 이에 대한 자신만의 스타일을 가지고 있다고 확신하지만, 이것이 시작하는 데 도움이 될 수 있습니다.
#!/bin/bash
SCREEN_WIDTH=$(stty size | awk '{print $2}')
echo "$SCREEN_WIDTH"
그 에코는 여러분이 원하는 것이 아니라 단지 우리가 쉽게 접근할 수 있는 곳에 가치를 두었다는 것을 보여주기 위한 것입니다.
답변4
COLUMNS
그래서 에는 없는 것 같으니 env
이 스레드의 제목이 잘못된 것 같습니다.아니요환경 변수?
export COLUMNS
echo $COLUMNS
작동하지 않습니다. 내가 수집한 링크에 따르면 export
부모 프로세스에서 자식 프로세스로 무언가를 사용할 수 있게 만드는 것은 내가 원하는 것이 아닙니다. 그 제안이 무엇을 말하는지, 아니면 내가 그 내용을 잘못 읽었거나 잘못 해석했는지 잘 모르겠습니다.
COLUMNS=$COLUMNS my_script
결과 :
fork: retry: No child processes
fork: Resource temporarily unavailable
나는 이 "과도한" 제안의 나머지 부분을 아직 완료하지 않았습니다. 왜냐하면 그것은 진흙처럼 명확하기 때문입니다.
screen_width=`stty size | cut -f2 -d " " -`
예그러나 일하십시오. 그러나 이것은 실제 문제가 아닌 즉각적인 문제만 해결합니다. 왜냐하면 더 많은 것을 제거하고 싶을 수도 있고 set
각 항목에 대한 명령을 알지 못하기 때문입니다(명령이 있는 경우). // 무엇이든 cut
대신 사용하세요 . 가능한 한 이식 가능한 것을 원하기 때문입니다(이것이 이식 가능한지는 모르겠지만 지금은 작동하므로 손가락질을 하고 싶습니다).awk
sed
stty
나예while 루프를 사용하면 예, for 루프가 내가 생각한 대로 작동하지 않으며 seq
내 쉘에는 수정자/아무것도 없습니다.
나는 정말로 알고 싶다왜이중 괄호가 필요하지만 정말 필요합니다.
이것"해당 rc 파일에 env 설정"env
, 흥미롭게 들리지만 방향은 불분명합니다. :) 이는 가져온 목록 에 특정 변수를 추가할 수 있다는 의미인 것 같은데요 ?