환경 변수를 스크립트에 전달하는 방법은 무엇입니까?

환경 변수를 스크립트에 전달하는 방법은 무엇입니까?

좋습니다. 명령줄에서 환경 변수를 표시할 수 있습니다.

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대신 사용하세요 . 가능한 한 이식 가능한 것을 원하기 때문입니다(이것이 이식 가능한지는 모르겠지만 지금은 작동하므로 손가락질을 하고 싶습니다).awksedstty

while 루프를 사용하면 예, for 루프가 내가 생각한 대로 작동하지 않으며 seq내 쉘에는 수정자/아무것도 없습니다.

나는 정말로 알고 싶다이중 괄호가 필요하지만 정말 필요합니다.

이것"해당 rc 파일에 env 설정"env, 흥미롭게 들리지만 방향은 불분명합니다. :) 이는 가져온 목록 에 특정 변수를 추가할 수 있다는 의미인 것 같은데요 ?

관련 정보