[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 04/21 15:11 / Filesize : 233 KB / Number-of Response : 926
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト総合 その15



1 名前:名無しさん@お腹いっぱい。 [2009/07/01(水) 09:42:48 ]
シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。

□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashなので特に注意。
 FreeBSDユーザは/bin/shの正体がashなので注意。
 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
  src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/
  heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
 (理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)

□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。

前スレ
シェルスクリプト総合 その14
pc12.2ch.net/test/read.cgi/unix/1233179688/

69 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 23:39:34 ]
>>68
「保存」してねえぞ

(echo '$-1,$d'; echo wq) | ed -s a.txt

70 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 23:41:10 ]
>>68
全角?はなんのおまじない?

71 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 23:43:51 ]
>>69
printfコマンドって、使えない環境もあるのかな。
あと「wq」は使えなくて「w」と「q」の2コマンドなら
OKという環境はよくあるね。

72 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 23:44:10 ]
>>69
ありがとうございます。
でも結構難しいですね。もうちょっと簡単に短くできませんでしたっけ?

73 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 00:47:11 ]
度々すみません。
たしかheadで出来たと思うのですが
a.txtの最後から2行を削除して保存。とか出来ませんでしたっけ?

74 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 01:09:23 ]
保存はともかく、
末尾の指定行数をカットできるのはGNUのおせっかいheadくらいじゃないか

75 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 07:38:51 ]
>>70
半角バックスラッシュが?に化ける模様。
そう解釈すれば >>68 が正解。

76 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 08:06:31 ]
Safari@Macかね?

77 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 16:19:50 ]
>>71
>printfコマンドって、使えない環境もあるのかな。

SunOS4 とか。




78 名前:amatsuno ◆y1bfd53lWE [2009/07/14(火) 17:52:11 ]
この前はありがとうございました。

もうひとつ教えて下さい。

前回教えていただきましたリストを1行にまとめる方法を教えて下さい。

変更前のファイル(b_ind)の中身);0
DEF_ind
JKL_ind
TUV_ind

変更後のファイル(a_ind)の中身);
DEF_ind,JKL_ind,TUV_ind

上記では3行ですが、実際は1-8のいずれかの行数となります。
このような複数行をカンマ区切りの1行にしたいのです。


DBからバックアップを取る時の指定のインデックスのため、
カンマ区切りの1行記載が必要となりました。

すいませんが知っている方、
宜しくお願いいたします。

79 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 18:01:02 ]
>>78
>>60 のスクリプトをちょっと修正すればいいだけだよ。

awk -F, '$1=="A_table"{out=$($2+3);for(i=1;i<$2+0;i++){printf $(i+2) ",">>out}print $(i+2)>>out}'

80 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 19:17:06 ]
>>78-79

awkはシェルにあらず。
シェルスレならシェルで解決。


#!/bin/sh

IFS=,
while read line
do
set $line
case $1 in A_table):;;*)continue;;esac
shift
max=$1
shift
eval out='$'$#
i=1
while [ $i -lt $max ]; do
echo -n "$1",
shift
i=`expr $i + 1`
done > "$out"
echo "$1" >> "$out"
done

81 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 21:01:22 ]
経験的にsedとawkはrcスクリプトで使われてるのでOK

82 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 21:16:41 ]
経験的にイマドキのOSはrcスクリプト自体を使わないのでNG

83 名前:amatsuno ◆y1bfd53lWE [2009/07/15(水) 09:40:43 ]
>>79
できました。
ありがとうございます。

84 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/15(水) 16:09:35 ]
>>82
テンプレ読み直してこい
あまりキチガイめいたこと言うなよ

85 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/16(木) 00:53:20 ]
#!/bin/rc もベル研純正シェル

86 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/17(金) 21:39:49 ]
>>34

awkはシェルにあらず。
シェルスレならシェルで解決。


#!/bin/bash

n=$((-$1))
shift
for file in "$@"; {
i=1
while IFS= read -r line
do
((i++ == n)) && {
echo "$line"
break
}
done < "$file"
}

87 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/17(金) 21:52:56 ]
bash使うなよ



88 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/17(金) 22:25:33 ]
bashはLinux板でやれ

89 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/17(金) 22:39:05 ]
>>87-88
bashに過剰反応するな。
kshでもzshでも動くから、bash依存とまでは言えない。


#!/bin/ksh

n=$((- $1))
shift
for file in "$@"; {
i=1
while IFS= read -r line
do
((i++ == n)) && {
echo "$line"
break
}
done < "$file"
}

90 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/18(土) 00:36:24 ]
POSIX準拠だから#!/bin/shでもいいはず、といってみる

91 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/18(土) 01:40:37 ]
/bin/shにはPOSIX shellを置く、なんてことはPOSIXに書いてない

92 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 13:50:12 ]
シェルスクリプトでドラッグアンドドロップできる?

93 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 14:12:21 ]
>>92
目的は何?

94 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 14:32:02 ]
>>93
目的がわかっても答えられないのに逆質すんな。

95 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 14:38:10 ]
あぁ、釣りか。

つられちゃったw てへっ?☆

96 名前:92 mailto:sage [2009/07/21(火) 15:19:06 ]
ちょっと思いついたので聞いてみただけです。目的はありません。

97 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 01:01:27 ]
シェルスクリプトで手マンできますか?



98 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 01:03:03 ]
>>97
目的は何?

99 名前:sage [2009/07/22(水) 15:28:06 ]
質問させてください。
標準入力から入力した値を処理するシェルスクリプト(Bシェル)を作成しています。
入力値に\(バックスラッシュ)が入る可能性があるので、
readのオプションに「-r」を付けて、入力値をすべて受け取れるようにしようと思ったのですが、
「-r」オプションをつけると「英数字以外の文字が使用されています。」というメッセージが出力され
オプションが使えないようです。

例) OS:Solaris10
$ cat aaa.sh
#!/bin/sh
read aaa
echo $aaa

read -r ppp
echo $ppp
$
$ ./aaa.sh
III ←コマンドラインから入力
III ←出力
./aaa.sh: -r: 英数字以外の文字が使用されています。 ←オプションを付けたreadに対してのエラーメッセージ

質問ですが、Bシェルでは、readに「-r」オプションは使えないのでしょうか?
(manを見る限り使えないとは言ってないように思われたのですが)
もし、使えないとすると、何か他に方法をご教授頂けないでしょうか?
(出来る限りBシェルでしたいと考えているのでこのコマンドだけkshで実行するなどでしょうか)
よろしくお願いします。

100 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 15:45:09 ]
どうみても使えるとは書いていませんが、何を見ているのでしょうか?
docs.sun.com/app/docs/doc/816-5165/sh-1?l=Ja&a=view

101 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:14:27 ]
>>99
Solarisの/bin/shのreadは、-rには対応していません。

bashか、zshか、kshを使いましょう。

102 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:18:57 ]
>>99
どうしても /bin/sh だけでやりたい場合、

read -r aaa
の代わりに、

aaa=`head -1`
とやる方法がある。

103 名前:sage [2009/07/22(水) 16:32:21 ]
ありがとうございます。
>>100
-r 使えないんですね。
docs.sun.com/app/docs/doc/819-1210/read-1?a=view
を見て、標準のオプションなのかなと思い込んでました。

>>101
やっぱり他のシェルにするべきなのか
検討します。

>>102
その様な方法もあるんですね。勉強になります。
今回使用できるのか検討します。


104 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:32:27 ]
なるほどねえ

105 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:34:43 ]
>>103
> docs.sun.com/app/docs/doc/819-1210/read-1?a=view
sh のとこに -r 書いてないじゃん。

106 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:39:22 ]
docs.sun.com に書いてあるのは、外部コマンド版の /usr/bin/readじゃん。
中身はkshスクリプト。

これって、結局シェル変数が親プロセスに渡らないから意味ないし、
外部コマンド版の /usr/bin/cd と並んで意味不明コマンドのひとつなんだよな。

107 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:40:44 ]
>>106
いや、/usr/bin/read 以外にシェルの内部コマンドについても書いてあるよ。



108 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:44:04 ]
>>107
そんなことは知ってるよ。
そうじゃなくて、/usr/bin/readのアフォさ加減について話題を振りたいわけだが。

109 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:46:03 ]
>>106の書き方じゃ知ってたかどうかわからんよ。

110 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:50:18 ]
質問者の >>99 が、shの内部コマンドのreadは使えなくても、
shから/usr/bin/readを呼び出せば使える、と勘違いしていた可能性もあるわな。

111 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:04:48 ]
>>108
POSIX標準では、
・$0 "$@"で実装できるからシステムの負担にはならない
・いい使い方があるかも知れない
・対称性のため
などと存在理由を説明しています。

112 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:26:25 ]
>>111
>・対称性のため

なら、なぜ、eval exit export wait などについては
外部コマンド版がないのか合理的な説明をお願いします。

113 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:35:26 ]
POSIX仕様には書いてありません。

114 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:41:28 ]
POSIX標準がそう決めた理由を聞いているのに、
「POSIX仕様には書いてありません」は循環論法。

115 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:53:32 ]
>>111に理由聞いてもしょうがないんじゃね。

116 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:56:28 ]
使えない外部コマンドがあるくせに、
Solarisでは /usr/bin/[ が削除されてるんだよなぁ。
ほんとわけわからん。

117 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:57:33 ]
>>116
使いたいの?



118 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:59:48 ]
v7shをもってきて使いたくなるかもしれないじゃないか

119 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 18:16:31 ]
>>117
使いたいかどうかじゃなくて、

/usr/bin/[ は、呼び出せば動作する。
一方、/usr/bin/read とか、/usr/bin/umask とかは readや umaskの動作はしない。

動作するものを削除して、動作しないものを配置することの馬鹿さを言ってるんだが。

120 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 18:56:40 ]
あってもなくても害がないならどっちでもいいじゃん。
馬鹿と非難するほどのことでもないと思うけど。

121 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 19:39:41 ]
これ、正しいか?

docs.sun.com/app/docs/doc/819-1210/read-1?a=view
> 例 1 read コマンドの例
>
> 以下に示す /usr/bin/read の例は、入力ファイルの内容を、各行の先頭フィールドを最後尾に 移動して出力するものです。
> example% while read -r xx yy
> do
> printf "%s %s\n" "$yy" "$xx"
> done < input_file

122 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 20:12:29 ]
マニュアルのバグだね。send-prしといてね。

123 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 03:48:55 ]
AIX5.2,5.3で2Gを超えるディレクトリをtarで固めるにはどうすればいいのでしょうか?

124 名前:名無しさん@お腹いっぱい。 mailto:SAGE [2009/07/23(木) 15:41:48 ]
man tarとすると、ustarヘッダーの書式を使用すると、ファイルサイズを最大8GBにできます。
とあるのですが、具体的にどうすれば2GB以上のファイルをtarで扱えるようになるのでしょうか?

125 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 17:05:40 ]
まず、適切な質問の方法を学びましょう。

126 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 17:05:54 ]
これは「シェルスクリプト」なのか ?

まぁとりあえずAIX 5.2では可能らしい
ttp://d.hatena.ne.jp/aix_memo/20090202/1233564844

US-TARかどうかは適当に固めたものを用意してcatで確認したらいい
ustarの文字が入ってたらUS-TARの形式

ほかに
ファイルシステムの問題かも知れない。何使ってる ?
/tmpの残り容量の問題かも知れない。十分ある ?

127 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 17:52:21 ]
>>125
まず、適切な回答の方法を学びましょう。

わからないなら黙っていましょう。



128 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 17:58:09 ]
AIXスレ行け。

129 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 18:06:20 ]
>>127
クズは黙ってろ。

130 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 18:15:49 ]
>>123 の質問がとくに不適切とも不備な質問とも思えない。
実際にAIXで2GB超のファイルをtarで固めた経験がある者なら
>>123 を見ただけで即答できるはずだ。

質問の仕方に注文を付けたり、さらに「○○の結果は?」とか追加情報を求める回答者は
その追加情報があっても答えられないダメ回答者。

131 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 18:17:42 ]
おかしな煽り野郎が張り付いている模様です。

しばらく放置しましょう。てか、元の質問がシェルスクリプトの質問じゃねぇし。

132 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 18:18:36 ]
シェルスクリプトスレで質問するのは適切ではない。言い訳してないで。消えろ。

133 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 18:20:43 ]
その tarを シェルスクリプトの中で使う予定なんですぅ、、

134 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 18:22:24 ]
言い訳してないで。消えろ。カス。

135 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 18:27:49 ]
AIX5.2とAIX5.3です。
以下のようなシェルを発行したところ、
dir以下に2GBを越えるファイルがあるとエラーになります。
どのように修正すればよろしいか?

#!/bin/sh
tar cvf hoge.tar dir

136 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 18:36:21 ]
詰まらん。消えろ。クズ。

137 名前:名無しさん@お腹いっぱい。 mailto:SAGE [2009/07/23(木) 20:43:57 ]
>>126
ありがとうございます。
USTARの文字ははいっていました。
TMPには空きがあります。
ファイルシステムについては、よくわかりません。



138 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 21:51:51 ]
>>137
2G制限ならulimitを確認。
8G制限はどうにもならないのでGNU tarでも使ったら?
で「シェルスクリプトで必要だから」という理由で環境依存の
質問をシェルスクリプト一般のスレでやっても煙たがられるだけ
というありがたい指摘を、そろそろ受けいれたらどうかな?

139 名前:名無しさん@お腹いっぱい。 mailto:SAGE [2009/07/23(木) 23:39:41 ]
>>138
ありがとうございます。
今帰りなので、週末に調べてみます。

140 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/26(日) 07:59:26 ]
ulimitはunlimitedでした。引続きお願いします。

141 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/29(水) 12:57:14 ]
スレ違いだと何度いったらわかるんだ。池沼。消えろ。

142 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/31(金) 20:12:20 ]
すみません、お力を貸してください。
aaa.txtの中身が、

aa\n
bb\n
cc\n

として、これをシェルスクリプトで

unko=$(cat aaa.txt)
echo ${unko}

とすると、

aa bb cc

と改行がスペースに置換されていますが、これを改行のまま格納することはできないでしょうか。

上記はあまりいい例ではないので「cat aaa.txt」でいいだろ、と思われるかと思いますが。。。
ftp -nvとかの標準出力を一旦変数に入れといて、後から結果解析及び出力したく、しかも、諸事情でtmpファイル(←すみません、ちんぽファイルではなくて一時ファイルです)を作るのはNGなので、なんとか改行をスペースに置換させないで変数に入れて実現したいのです。

どなたか、ご教示お願いいたします。OSは、HP-UX、Bashです。よろしくお願いします。

143 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/31(金) 20:48:07 ]
>>142
echo "$unko"

144 名前:名無しさん@お腹いっぱい。 [2009/08/01(土) 23:50:17 ]
シェルを2つ以上コマンドで開くことは出来る?
今はパネルからクリックしてるので大変。
でも、コマンド売っても出てこない><
ちなみに端末エルミネーターはBASH。

145 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/01(土) 23:52:35 ]
はいはい 15点

146 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/02(日) 05:00:19 ]
>>142
配列(パイオツじゃないよ)使うんじゃだめなの?

147 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/02(日) 09:40:59 ]
>>146
>>143



148 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/02(日) 13:13:29 ]
>>142
シェル変数の展開時は、ダブルクォートでくくるのが原則。
それで、改行もスペースもそのまま保存される。

逆に、単純に展開する場合は ${ } でくくる必要はない。

149 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 00:52:02 ]
. や source で起動されても、自分の名前を取れる方法ありますか?

当然$0だとだめなわけですが

[root@miu tmp]# cat a.sh
#!/bin/sh

echo $0

[root@miu tmp]# source a.sh
bash
[root@miu tmp]#

150 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 01:39:05 ]
. や source は起動されてないし

151 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 02:40:17 ]
そこをなんとか・・

152 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 04:37:49 ]
bash依存

$ echo 'echo $BASH_SOURCE' > /tmp/t.sh
$ . /tmp/t.sh
/tmp/t.sh


153 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 06:26:10 ]
>>152
bash3以降依存だね。bash2だと動作しない。

154 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 07:19:14 ]
>>149
先頭で自分の名前を変数に代入すれば?

155 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 07:24:49 ]
>>154
全然解決になりません。
同じスクリプトを複数のファイル名でハードリンクしていて、
呼ばれた名前によって動作を切替えたいので。

156 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 07:28:15 ]
もう $BASH_VERSION チェックして $BASH_SOURCE 使えよ。

157 名前:名無しさん@お腹いっぱい。 [2009/08/03(月) 08:19:17 ]
そもそも.でもsourceでも名前わかってなきゃ呼べないよね
呼べるってことは名前わかってるじゃん
あほじゃないの?
$_とかでもいいんじゃないの?




158 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 08:39:57 ]
>>157
惜しいけど、

hoge=file
source $hoge

みたいに、変数経由で呼ぶと、
$_ では名前を取得できないから NG。

159 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 08:43:04 ]
>>157
シェル依存。

ashとかでは、sourceファイル内一発目の $_ は、$0 と同じ値になってる。よって不可。

160 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 20:41:06 ]
>>155
>同じスクリプトを複数のファイル名でハードリンクしていて、
>呼ばれた名前によって動作を切替えたいので。
それは(+sourceした時にまで対応したいという)発想に無理があるのでは

161 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 20:48:50 ]
>>160
わからないなら黙ってろ

162 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 21:10:02 ]
シェル非依存な方法はないから。

163 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 01:00:01 ]
関数内のexitをreturnと同じように振舞わせる方法はないでしょうか。

現場で共通利用している共通関数の定義ファイルを . で読込んで使っているのですが、、、
お目当ての共通関数は、関数内でエラーだった場合、ログ吐いてexitまでしてしまい、困りました。
エラーコードで返してくれさえすれば、処理自体はそのまんま使いたいのですが。。。

その共通関数の戻り値はreturnでは返されず、共通関数内で定義した変数に格納され、呼び元でその変数を使う作りになっています。
何卒よろしくお願いします。

164 名前:名無しさん@お腹いっぱい。 [2009/08/04(火) 01:02:56 ]
質問です。
以下のようなファイルhoge.datがあるとします。
------------------------
~$ cat hoge.dat
usa\newyork
japan\tokyo
korea soul
------------------------
このhoge.datを、以下のようなスクリプトで読み込んでから、出力してみたのですが、
円マーク(\)が表示されなくなります。
------------------------
~$ cat hoge.sh
#!/bin/sh
IFS='
'
while read line
do
echo "$line"
done < hoge.dat
---------------------------
実行結果
---------------------------
~$ ./hoge.sh
usanewyork
japantokyo
korea soul
---------------------------
円マーク(¥)も表示されるようにするにはどうしたらよいでしょうか?

165 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 06:39:16 ]
>>164
read -r


あと、円マークじゃなくてバックスラッシュが表示されるように設定しろ

166 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 06:44:51 ]
>>163
alias exit=return
. hoge
unalias exit

167 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 08:37:30 ]
>>163
result=`. hoge;echo \$result`



168 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 08:43:41 ]
>>167
「.」でソースしてるファイル内で「関数定義」をしているので、
それだとサブシェル扱いになるので、リターンすると関数定義が消えてしまうので
解決になりません。(戻り値が必要なのではありません)

169 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 08:58:38 ]
条件後出しすんなよ。そういうことなら
(共通関数)

条件後出しのお代りか?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<233KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef