環境変数をスクリプトに渡すには?

環境変数をスクリプトに渡すには?

いいですね。コマンドラインから環境変数を表示できます。

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、興味深く聞こえますが、方向は不明です。 :) これは、インポートされたリストに特定の変数を追加できることを意味していると思いますか?

関連情報