お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2010-01-19 00:13:16

linuxman
新しいメンバ
登録日: 2010-01-19

シェル変数の表示方法

Ubuntu9.10を使用しております。
CentOSでは、「set」コマンドでシェル変数と環境変数を表示できておりましたが、
Ubuntuですと、表示されません。

ちなみに「env」コマンドで環境変数は表示されました。

ubuntuで、シェル変数を表示するにはどのようにしたらよろしいでしょうか?

ご教授願いします。

オフライン

 

#2 2010-01-19 00:57:59

si
メンバ
From: hokkaido kitami, jp
登録日: 2007-01-15

Re: シェル変数の表示方法

> Ubuntu9.10を使用しております。
私の環境(AMD64、デフォルトのbash)では、1万行を越える設定が表示されます。
ちなみに、Fedora12では、百数十行。
$ set |head -n 50
BASH=/bin/bash
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_COMPLETION=/etc/bash_completion
BASH_COMPLETION_DIR=/etc/bash_completion.d
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="0" [2]="33" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
BASH_VERSION='4.0.33(1)-release'
COLORTERM=gnome-terminal
COLUMNS=159
COMP_WORDBREAKS=$' \t\n"\'><=;|&(:'
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-XBUCN8CQjo,guid=f42db59aaaf873842c8ca7094b546e62
DESKTOP_SESSION=gnome
DIRSTACK=()
DISPLAY=:0.0
EUID=1000
GDMSESSION=gnome
GDM_KEYBOARD_LAYOUT=jp
GDM_LANG=ja_JP.UTF-8
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
GNOME_KEYRING_PID=1988
GNOME_KEYRING_SOCKET=/tmp/keyring-FIuZFf/socket
GROUPS=()
GTK_IM_MODULE=ibus
GTK_MODULES=canberra-gtk-module
GTK_RC_FILES=/etc/gtk/gtkrc:/home/imura/.gtkrc-1.2-gnome2
HISTCONTROL=ignoreboth
HISTFILE=/home/imura/.bash_history
HISTFILESIZE=500
HISTSIZE=500
HOME=/home/imura
HOSTNAME=ubuntu
HOSTTYPE=x86_64
IFS=$' \t\n'
LANG=ja_JP.UTF-8
LESSCLOSE='/usr/bin/lesspipe %s %s'
LESSOPEN='| /usr/bin/lesspipe %s'
LINES=24
LOGNAME=imura
LS_COLORS='rs=0:di=01;34:ln=01;36:hl=44;37:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:'
MACHTYPE=x86_64-pc-linux-gnu
MAILCHECK=60
OPTERR=1
OPTIND=1
ORBIT_SOCKETDIR=/tmp/orbit-imura
OSTYPE=linux-gnu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
bash: set: write error: Broken pipe

オフライン

 

#3 2010-01-19 02:01:03

hir0
メンバ
登録日: 2008-09-28

Re: シェル変数の表示方法

通常使う物は定義づけられているし常時使う物や他から参照するものは環境変数へexportさせれば良いかも。

siさんのが教示された物を80行足らずとenvde表示された行をソートして比較、差分してCentOSの環境と照らし合わせれば、OSの(シェル)の環境の違いが見えてくるかも。

オフライン

 

#4 2010-01-19 11:16:22

linuxman
新しいメンバ
登録日: 2010-01-19

Re: シェル変数の表示方法

siさん、hir0さん
お返事ありがとうございます。

原因がわかりました。

$ set

これだけで実行していたので、一番最後まで表示されていたのが
勘違いのはじまりだったようです。
setで表示される最後の記述はスクリプトだったので、変数指定がみつからなかったです。

$ set | head

等で実行すると先頭から表示されましたので、変数の指定を確認できました!!

ご教授ありがとうございました!!


シェル変数にからむことですが、
誰かわかる方がいらっしゃればアドバイスください。

setコマンドでは、シェル変数と環境変数が同時に表示されると
思うのですが、シェル変数だけを表示するコマンドってあるのでしょうか?

環境変数だけであれば、envコマンドで良いと思いますが・・・。


以上、宜しくお願い致します。

オフライン

 

#5 2010-01-19 13:43:29

weyk
メンバ
登録日: 2009-04-03

Re: シェル変数の表示方法

こんにちは。

linuxman による投稿:

setコマンドでは、シェル変数と環境変数が同時に表示されると
思うのですが、シェル変数だけを表示するコマンドってあるのでしょうか?

環境変数だけであれば、envコマンドで良いと思いますが・・・。

sh系(bashも)では、「exportしたシェル変数」「シェル変数」という区切りしかないような感じですね。この辺は、環境変数と変数の管理が異なるcsh系とは異なりそうです。

そこで。setにて、全ての変数を参照できることがわかっていて、かつ、export -pにて、exportした変数がわかるので、それらを適当に組み合わせて・・・

コード:

set | ( while read a ; do b="^`echo ${a} | cut -d'=' -f 1`=" ; export -p | cut -d " " -f 2- | grep -q "${b}" ; if test "$?" -ne "0" ; then echo ${a} ; fi ; done ;)

と、すると、現シェルの変数全体から、子プロセスで起動されたシェル内でexportされているもの(現シェルの ではないです)を除いたものの一覧が取れます。こんな感じで、ぐりぐりやるしかないのかなぁ と思うところです。
# とりあえず、思いつくまま組み立てただけなので、遅いです(無駄なプロセスの起動も多いし・・・。関数があるど駄目かも。)

オフライン

 

#6 2010-01-19 21:20:33

STGSAGWAN
ゲスト

Re: シェル変数の表示方法

#4のlinuxman による投稿:

シェル変数だけを表示するコマンドってあるのでしょうか?

以下、bashということで。

専用コマンドが既にあるのかもしれませんが、頭の体操のつもりで書きます。

現在のシェルでsetした結果と、子のシェルを起動しsetした結果をdiffすると、理論上できそうな気がします。

コード:

set > 1.txt
bash -c -i "set > 2.txt"
diff -U 0 1.txt 2.txt

これで十分ですが、意識したくない変数の差分を除去し、一時ファイルに/tmpを使ったりすると、

コード:

EXCEPTION_VARS='EXCEPTION_VARS|FUNCNAME|BASH_LINENO|OLDPWD|PPID|SHLVL|_|PIPESTATUS|BASH_EXECUTION_STRING'
set | grep -v -E "^(${EXCEPTION_VARS})=" > /tmp/1.txt
bash -c -i "set | grep -v -E \"^(${EXCEPTION_VARS})=\" > /tmp/2.txt"
diff -U 0 /tmp/1.txt /tmp/2.txt | grep '^[-+][^-+]'

とか。

いまいち洗練されてないです。より簡単な方法はないのでしょうかね。

 

#7 2010-01-19 21:31:33

einundzwanzighundertsechs
メンバ
登録日: 2008-12-28

Re: シェル変数の表示方法

declare -p を利用するはどうでしょう?

オフライン

 

#8 2010-01-19 21:34:37

linuxman
新しいメンバ
登録日: 2010-01-19

Re: シェル変数の表示方法

weykさん、STGSAGWANさん

ご返事ありがとうございます。
参考になります。
専用のコマンドがほしいものですね^^

もう一つご質問ですが、以下わかるかた
ご教授願います。

PS1はシェル変数
HISTSIZEはシェル変数
PATHは環境変数

という解釈でよろしいのでしょうか。
ただ、PATHが環境変数だった場合、エクスポートせず、
PATH=$PATH:/dir1 等でパスをとおすことが
できるので、そこが不明です。

ここらへんが整理できておりませんので、
少し説明していたきますと助かります。

宜しくお願い致します。

オフライン

 

#9 2010-01-19 22:28:19

linuxman
新しいメンバ
登録日: 2010-01-19

Re: シェル変数の表示方法

追記ですが、

よく書籍等で
PS1、HISTSIZE、PATHは環境変数と書かれています。

$ env | grep PS1
$ env | grep HISTSIZE

とやっても表示されません。

$ echo $HISTSIZE
500

と結果になり、
$ HISTSIZE=300
$ echo $HISTSIZE
300

シェル変数での設定となります。

シェル変数なのか環境変数なのかがしっくりきません。

ご教授お願い致します。

オフライン

 

#10 2010-01-19 23:11:47

hito
管理者
登録日: 2007-03-18

Re: シェル変数の表示方法

本題からかなり離れているような気がするので、別のトピックを起こしていただけないでしょうか。

オフライン

 

#11 2010-01-20 14:14:21

linuxman
新しいメンバ
登録日: 2010-01-19

Re: シェル変数の表示方法

hitoさん

失礼いたしました。
別のトピックにて質問させていただきます。

宜しくお願い致します。

オフライン

 

Board footer

Powered by FluxBB