09/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。
URLリンク(src.opensolaris.org)
URLリンク(heirloom.sourceforge.net)
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
前スレ
シェルスクリプト総合 その14
スレリンク(unix板)
2:名無しさん@お腹いっぱい。
09/07/01 09:45:39
□関連スレ:
sed
スレリンク(unix板)
正規表現
スレリンク(unix板)
おまえら! shell は何を使っているんですか?
スレリンク(unix板)
Eshell の使い方とか設定とか【Emacs Shell、Lisp】
スレリンク(unix板)
□初心者向けリンク
「誰にでも」シリーズ
URLリンク(kanji.zinbun.kyoto-u.ac.jp)
/bin/shプログラミング入門
URLリンク(freebooks.info.nara-k.ac.jp)
シェルを使おう - 導入からプログラミングまで -
URLリンク(www.netfort.gr.jp)
□入門者向け書籍:
プロフェショナルシェルプログラミング
URLリンク(www.amazon.co.jp)
入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界
URLリンク(www.amazon.co.jp)
UNIXシェルプログラミング徹底解説
URLリンク(www.amazon.co.jp)
入門Kornシェル
URLリンク(www.amazon.co.jp)
入門bash
URLリンク(www.amazon.co.jp)
3:名無しさん@お腹いっぱい。
09/07/01 09:46:30
□参考リンク:
UNIXの部屋 (沢山のコマンドの簡単な紹介など)
URLリンク(x68000.q-e-d.net)
POSIX: Shell & Utilities (標準規格)
URLリンク(www.opengroup.org)
□最近のシェルスクリプト本(1)
(2004/03) UNIXシェルスクリプトハンドブック 関根 達夫 (著)
URLリンク(amazon.co.jp)
(2004/10) UNIXシェルスクリプト逆引き大全333の極意 中橋 一朗 (著)
URLリンク(amazon.co.jp)
(2004/11) 仕事に使えるLinuxシェルスクリプト 千葉 真人 (著)
URLリンク(amazon.co.jp)
(2004/12) UNIXシェルスクリプトサンプルブック デイブ・テイラー (著)
URLリンク(amazon.co.jp)
(2005/02) シェルスクリプト基本リファレンス 山森 丈範 (著)
URLリンク(amazon.co.jp)
(2005/04) LinuxWorldスクリプト 月刊リナックス・ワールド総集編 月刊LinuxWorld特別 (著)
URLリンク(amazon.co.jp)
(2005/05) UNIXシェルスクリプトコマンドブック 山下 哲典 (著)
URLリンク(amazon.co.jp)
(2005/05) わかる&使える UNIX基礎講座 シェルスクリプト編 中井 獏 (著)
URLリンク(amazon.co.jp)
4:名無しさん@お腹いっぱい。
09/07/01 09:48:31
□最近のシェルスクリプト本(2)
(2005/07) UNIX シェルスクリプト辞典 川井 義治 (著)
URLリンク(amazon.co.jp)
(2005/08) シェルスクリプト ポケットリファレンス bash編 宮原 徹 (著), 川原 龍人 (著)
URLリンク(www.amazon.co.jp)
(2005/12) 図解でわかるLinuxシェルスクリプト・正規表現 小泉 修 (著)
URLリンク(www.amazon.co.jp)
(2006/01)詳解 シェルスクリプト アーノルド ロビンス (著), ネルソン・H.F. ベーブ(著), Arnold Robbins (原著), Nelson H.F. Beebe (原著), 日向 あおい (翻訳)
URLリンク(www.amazon.co.jp)
(2007/3) Linuxシェルスクリプトユーザー便利帳―bash2/bash3対応 伊藤 幸夫 (著), 寒川 陽美(著)
URLリンク(www.amazon.co.jp)
(2007/9) ゲームで極める シェルスクリプトスーパーテクニック 山森 丈範
URLリンク(www.amazon.co.jp)
(2007/10) UNIX/Linuxシェルスクリプトマスタリングハンドブック 野川 准子
URLリンク(www.amazon.co.jp)
5:名無しさん@お腹いっぱい。
09/07/01 09:49:46
□関連書籍と関連リンク:
FreeBSD Hypertext Man Pages
URLリンク(www.freebsd.org)
Linux JF (Japanese FAQ) Project.
URLリンク(www.linux.or.jp)
Unix Programming Frequently Asked Questions 日本語訳
URLリンク(www.adl.nii.ac.jp)
UNIXプログラミング環境
URLリンク(www.amazon.co.jp)
□人間初心者へのお願い:
・このスレはシェルスクリプトについてのスレです。
シェルの対話的な利用についての話やスクリプトと関係ないコマンドの
使い方の質問などはスレ違いなので無用に願います。
□シェルスクリプトでよく使うコマンド:
制御・条件判定系: [,test,expr,true,false,yes,getopts
テキスト処理系: cat,awk,sed,tr,sort,uniq,grep,wc,head,tail,cut,paste,comm,join
ファイル検索系: find
(スペースなどを含むファイル名を正しく処理するため、
findは -exec command {} + を推奨。
他に -print0、xargsは -0オプションという方法もあるがSolaris非対応)
ディレクトリ系: basename,dirname
出力系: echo,printf
対話コマンド制御系: expect
http/ftpの処理自動化: wget,curl
6:名無しさん@お腹いっぱい。
09/07/01 10:57:14
回答者側の心得:
エスパー以外回答禁止
わからないなら無理に回答せず、黙っていましょう
あなたが回答しなくても、もっと詳しい回答者がより的確に回答してくれます
無理に中途半端な回答をすると、回答者同士で叩き合いが始まり、スレのS/N比が悪化します
7:名無しさん@お腹いっぱい。
09/07/02 00:49:01
2005年は、最近ですか?
8:名無しさん@お腹いっぱい。
09/07/02 09:10:15
地球の歴史からすれば一瞬
9:名無しさん@お腹いっぱい。
09/07/02 11:05:46
中国の歴史からしても1‰
10:名無しさん@お腹いっぱい。
09/07/02 11:13:19
中国400年の歴史?
11:名無しさん@お腹いっぱい。
09/07/02 11:58:24
‰を知らないゆとり乙
12:名無しさん@お腹いっぱい。
09/07/02 12:08:38
中国は建国60年
つまり
>中国の歴史からしても1‰
は0.6年、61日
13:名無しさん@お腹いっぱい。
09/07/02 12:09:35
219日だw
14:名無しさん@お腹いっぱい。
09/07/02 13:14:42
句点の。に見えたわorz
15:名無しさん@お腹いっぱい。
09/07/05 03:20:29
ftpであるディレクトリ配下をまるまるダウンロードするために、
ローカルに同じディレクトリ構造を作りながらファイルを1個づつダウンロードしていくシェルをつくりたいんですが
ftpでのdir結果をファイルに落としてそれを読んでって感じになりますかね?
簡単そうな方法があるとうれしいんですが?
16:名無しさん@お腹いっぱい。
09/07/05 03:32:17
簡単な方法なら wget -r だが
17:名無しさん@お腹いっぱい。
09/07/05 16:48:05
>>12
最近はパーミル習わないのか
18:名無しさん@お腹いっぱい。
09/07/05 18:56:12
>>17
円周率を3と習う世代に無理を言っちゃいかん。
19:名無しさん@お腹いっぱい。
09/07/08 12:49:23
シェルの本で定番は何ですか?
20:名無しさん@お腹いっぱい。
09/07/08 12:59:59
「たった3日でシェルが書ける、シェル自作入門」
~ シェルで始める Hello World ~
とか?
21:名無しさん@お腹いっぱい。
09/07/08 13:05:47
「ゲームで極める シェルスクリプトスーパーテクニック 」
シェルスクリプトでここまでできる。ゲームを作ってシェルスクリプトの超技を学べ。
22:名無しさん@お腹いっぱい。
09/07/08 13:08:42
おもわずググっちまったorz
23:名無しさん@お腹いっぱい。
09/07/08 13:17:05
>>22
see >>4
24:名無しさん@お腹いっぱい。
09/07/08 13:18:29
いや、自作の方な
25:名無しさん@お腹いっぱい。
09/07/10 00:53:20
質問です。
たとえば、以下のような仮のhogeコマンドを実行すると、
$ hoge -12 hoge.dat foo.dat bar.dat
パラメタで指定したファイル(hoge.dat、foo.dat、bar.dat)の12行目だけをリストするようなコマンドはないでしょうか?
よろしくお願いします。
26:名無しさん@お腹いっぱい。
09/07/10 01:14:30
シェルスクリプトスレなのに、単一のコマンドでないといかんのか?
でないなら
for i in hoge.dat foo.dat bar.dat; do sed -n 12p "$i"; done
とか、
cat -n hoge.dat foo.dat bar.dat | egrep '^ *12^I'
とか。
「コマンド」風にしたいなら、関数にするなり、別のスクリプトにするなり。
27:名無しさん@お腹いっぱい。
09/07/10 06:43:11
>>26
シェルスクリプトスレで質問してるんだから、
$ hoge -行番号 ファイル...
という形式の引数を渡せるようなシェルを書いて回答してやれよ。
例えば、-12 で渡された引数を、sedの中に 12p の形に渡すためには
文字列の変換処理とかがちょっと必要になるだろ。
そのあたりも含めての質問だと思うが。
28:名無しさん@お腹いっぱい。
09/07/10 09:16:55
シェルを書いて回答してやれよ(笑)
29:名無しさん@お腹いっぱい。
09/07/10 09:47:48
>>26
2つ目の、cat -n の例、それじゃ駄目だろ。
全部のファイルに通し番号で番号が付いちゃうから。
30:名無しさん@お腹いっぱい。
09/07/10 10:04:15
俺のcatはファイルごとに1から始まるぞ
31:名無しさん@お腹いっぱい。
09/07/10 10:06:41
どこの方言OSのcatですか?
32:名無しさん@お腹いっぱい。
09/07/10 10:30:33
OpenSolarisとFreeBSDとNetBSDです。おたくはどちらのご出身で?
33:名無しさん@お腹いっぱい。
09/07/10 10:51:08
>>25
awk 'FNR==12{print}'
が単純でエレガントでは。パイプやループが要らないし。
34:名無しさん@お腹いっぱい。
09/07/10 11:02:28
あ、シェルにするには、
#!/bin/sh
n=$1
shift
awk "FNR==-($n){print}" "$@"
ね。-12とかの引数をマイナスの数とみなして、awkの中で符合反転してる。
35:名無しさん@お腹いっぱい。
09/07/10 13:05:32
シェルにする、とな!
36:名無しさん@お腹いっぱい。
09/07/10 15:19:28
>>32
みえすいた嘘付くな。
$ uname -a
SunOS opensolaris 5.11 snv_111b i86pc i386 i86pc Solaris
$ cat hoge
boke
kasu
$ cat -n hoge hoge
1 boke
2 kasu
3 boke
4 kasu
37:名無しさん@お腹いっぱい。
09/07/10 21:10:31
>>36
$ uname -a
FreeBSD freebsd.example.com 7.2-RELEASE FreeBSD 7.2-RELEASE #2: Fri May 22 10:29:03 JST 2009 root@freebsd.example.com:/usr/obj/usr/src/sys/GENERIC i386
$ cat -n /etc/ntp.conf /etc/ntp.conf
1 server ntp1.jst.mfeed.ad.jp
2 server ntp2.jst.mfeed.ad.jp
3 server ntp3.jst.mfeed.ad.jp
1 server ntp1.jst.mfeed.ad.jp
2 server ntp2.jst.mfeed.ad.jp
3 server ntp3.jst.mfeed.ad.jp
38:名無しさん@お腹いっぱい。
09/07/10 21:11:39
ちなみに GNU の cat だと連続する。
$ gcat -n /etc/ntp.conf /etc/ntp.conf
1 server ntp1.jst.mfeed.ad.jp
2 server ntp2.jst.mfeed.ad.jp
3 server ntp3.jst.mfeed.ad.jp
4 server ntp1.jst.mfeed.ad.jp
5 server ntp2.jst.mfeed.ad.jp
6 server ntp3.jst.mfeed.ad.jp
39:名無しさん@お腹いっぱい。
09/07/10 21:19:02
ntp.nict.jp 使ってやれよ!
40:名無しさん@お腹いっぱい。
09/07/10 21:51:19
>>39
Stratum 2 で充分だよ。
41:名無しさん@お腹いっぱい。
09/07/11 14:58:42
>>36
> みえすいた嘘付くな。
デフォルトだと/usr/gnu/binにあるcatが動くのも知らんのか。
わざわざインストールしてみたりしたんだろうか。
GNU以外でcat -nの番号が連続する実装ってある?
42:名無しさん@お腹いっぱい。
09/07/11 17:42:32
>>33 >>34 のエレガントな解が出た今となっては、
cat -n(笑)を使うようなかっこ悪い解はどうでもよい。
43:名無しさん@お腹いっぱい。
09/07/11 19:55:16
かっこ悪(笑)
44:名無しさん@お腹いっぱい。
09/07/11 21:51:28
(command)
って
command
ってやるのと何か違います?
45:名無しさん@お腹いっぱい。
09/07/11 22:23:25
デヴャブ
46:名無しさん@お腹いっぱい。
09/07/11 23:47:08
>>39
3msくらい遠い。ジッタは大差ない。
47:名無しさん@お腹いっぱい。
09/07/12 01:38:50
>>44
一例
cd / ; cd /tmp ; pwd
cd / ; ( cd /tmp ) ; pwd
48:名無しさん@お腹いっぱい。
09/07/12 06:48:20
>>47
それは当然知ってる。
コマンド1個だけの場合に、
command と (command) に違いがあるかどうかを聞いてるんだが。
49:名無しさん@お腹いっぱい。
09/07/12 07:00:54
>>44
シェルによっては、シェル自身の最適化で、
( ) を付けていてもサブシェルの必要がない場合はサブシェルにはしないため、
(command) と command に違いはない。
50:名無しさん@お腹いっぱい。
09/07/12 08:32:03
>>48
有る。
51:名無しさん@お腹いっぱい。
09/07/12 08:41:05
ash zsh ksh では (command) と command に違いはないようだ。(トレースして確認)
52:名無しさん@お腹いっぱい。
09/07/12 12:45:20
それらにおいても unset PATH と (unset PATH) は動作が違う気がする
53:名無しさん@お腹いっぱい。
09/07/12 14:01:37
>>52
それはあたりまえ。で、そんなことは聞いてない。
>>49
> 「サブシェルの必要がない場合はサブシェルにはしない」
欲嫁。
54:名無しさん@お腹いっぱい。
09/07/12 14:09:27
>>48
そこまでいくと実装依存的な話になる気がするけど
誰かに " (command) と command に違いは無い " とでも言って欲しいの?
で誰かがそういったところで保証される訳でもなし
" (command) と command " に違いはないから今後は " command "で書こうって話にはならない
逆に " (command) と command " に違いがないから作成中のスクリプトで「今困ってる」っていうなら
そこまで動作を調べられる>>48なら解決方法も分かってるだろ?
バカなの?
55:名無しさん@お腹いっぱい。
09/07/12 14:14:05
バカで~す
56:名無しさん@お腹いっぱい。
09/07/12 14:48:35
>>54
> 実装依存的な話になる気がするけど
すでに、>>51 が、
> ash zsh ksh では (command) と command に違いはないようだ。
って(実装依存を前提として)答えてるのに、いまさら「気がするけど」って何?
補足したいなら、>>51 が調べた以外のシェルではどうなってるか試して
レポートするべきじゃないの?
57:名無しさん@お腹いっぱい。
09/07/12 17:08:44
___ モシャモシャ
/ \
/ ⌒ ⌒ \
/ (●) (●) \ >56なに言ってんだこいつ
| 、" ゙)(__人__)" .)| ___________
\ 。` ⌒゚:j´ ,/ j゙~~| | | |
__/ \ |__| | | |
| | / , \n|| | | |
| | / / r. ( こ) | | |
| | | ⌒ ーnnn |\ (⊆ソ .|_|___________|
 ̄ \__、("二) ̄ ̄ ̄ ̄ ̄l二二l二二 _|_|__|_
58:amatsuno ◆Z7H81aEWFM
09/07/13 12:42:35
テストします。
次で質問させて下さい
59:amatsuno ◆y1bfd53lWE
09/07/13 13:02:32
質問させて下さい。
AIX(ksh)で、以下を行おうとしています。
コマンドなどわかりましたら、教えて下さい。
やりたいこと)
csvファイルを読み込んで、データを抜きだす。
csvファイル)
A_table,3,DEF_ind,JKL_ind,TUV_ind,out.txt
のように書かれたリストが複数行有ります。
出力ルール)
csvファイルの第1カラム目に書かれたテーブルを見て、
その中から該当の文字列を呼び出します。
該当の文字列は、
第2カラムで指定された数字分、第3カラム目から先のカラムに書かれたものになります。
(上記の場合、第2カラム目が3なので、第3カラム目から第5カラム目までとなります)
そしてその出力を最終カラムで指定したファイルに出力します。
上記の出力結果は、
DEF_ind
JKL_ind
TUV_ind
をout.txtに出力します。
すいませんが、
わかるかた、宜しくお願いいたします。
60:名無しさん@お腹いっぱい。
09/07/13 13:21:29
>>59
ほれ、
awk -F, '$1=="A_table"{out=$($2+3);for(i=1;i<=$2;i++)print $(i+2)>>out}'
61:amatsuno ◆y1bfd53lWE
09/07/13 13:47:11
>60
ありがとうございます。
ただこれを実行したところ、1箇所だけ問題があるようで、
3カラム目から先が永遠に出力されてしまい、ひたすら空白行が出ます。
第2カラム目で指定しらカラム数で止めるには、
どうすれば良いのでしょうか?
たびたびで申し訳ございませんが、宜しくお願いいたします。
62:amatsuno ◆y1bfd53lWE
09/07/13 13:51:46
>60
もうしわけございません。
61はデータ側の問題でした。
スクリプトは完璧でした。
誠に申し訳ございません。
ありがとうございました。
63:名無しさん@お腹いっぱい。
09/07/13 14:02:13
不正なデータとして、
第2カラムが数値以外だと、ループがおかしくなるな。
そういう場合でも安全なように、
for(i=1;i<=$2;i++)
を、
for(i=1;i<=$2+0;i++)
にしておいた方がいいかも。
64:名無しさん@お腹いっぱい。
09/07/13 14:13:42
>>59 >>60
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 -le $max ]; do
echo "$1"
shift
i=`expr $i + 1`
done > "$out"
done
65:名無しさん@お腹いっぱい。
09/07/13 14:19:55
awkも可だよ。
66:amatsuno ◆y1bfd53lWE
09/07/13 14:33:33
>>64
このawkを含んだ処理のkshは、
1.リストからデータの抜き出し
2.抜いたデータのインデックス検索
3.インデックス検索でたデータのバックアップ
4.バックアップデータのソート
になります。
その一部でしたので、
ここで質問させていただきました。
67:名無しさん@お腹いっぱい。
09/07/13 23:23:55
質問させてください。
テキストファイルの最後からN行を削除するにはどうしたらいいでしょうか?
例えばa.txtの最後から2行を削除して保存したいです。よろしくお願いします。
68:名無しさん@お腹いっぱい。
09/07/13 23:36:53
>>67
head -n `expr ?`wc -l < a.txt?` - 2` a.txt
69:名無しさん@お腹いっぱい。
09/07/13 23:39:34
>>68
「保存」してねえぞ
(echo '$-1,$d'; echo wq) | ed -s a.txt
70:名無しさん@お腹いっぱい。
09/07/13 23:41:10
>>68
全角?はなんのおまじない?
71:名無しさん@お腹いっぱい。
09/07/13 23:43:51
>>69
printfコマンドって、使えない環境もあるのかな。
あと「wq」は使えなくて「w」と「q」の2コマンドなら
OKという環境はよくあるね。
72:名無しさん@お腹いっぱい。
09/07/13 23:44:10
>>69
ありがとうございます。
でも結構難しいですね。もうちょっと簡単に短くできませんでしたっけ?
73:名無しさん@お腹いっぱい。
09/07/14 00:47:11
度々すみません。
たしかheadで出来たと思うのですが
a.txtの最後から2行を削除して保存。とか出来ませんでしたっけ?
74:名無しさん@お腹いっぱい。
09/07/14 01:09:23
保存はともかく、
末尾の指定行数をカットできるのはGNUのおせっかいheadくらいじゃないか
75:名無しさん@お腹いっぱい。
09/07/14 07:38:51
>>70
半角バックスラッシュが?に化ける模様。
そう解釈すれば >>68 が正解。
76:名無しさん@お腹いっぱい。
09/07/14 08:06:31
Safari@Macかね?
77:名無しさん@お腹いっぱい。
09/07/14 16:19:50
>>71
>printfコマンドって、使えない環境もあるのかな。
SunOS4 とか。
78:amatsuno ◆y1bfd53lWE
09/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:名無しさん@お腹いっぱい。
09/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:名無しさん@お腹いっぱい。
09/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:名無しさん@お腹いっぱい。
09/07/14 21:01:22
経験的にsedとawkはrcスクリプトで使われてるのでOK
82:名無しさん@お腹いっぱい。
09/07/14 21:16:41
経験的にイマドキのOSはrcスクリプト自体を使わないのでNG
83:amatsuno ◆y1bfd53lWE
09/07/15 09:40:43
>>79
できました。
ありがとうございます。
84:名無しさん@お腹いっぱい。
09/07/15 16:09:35
>>82
テンプレ読み直してこい
あまりキチガイめいたこと言うなよ
85:名無しさん@お腹いっぱい。
09/07/16 00:53:20
#!/bin/rc もベル研純正シェル
86:名無しさん@お腹いっぱい。
09/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:名無しさん@お腹いっぱい。
09/07/17 21:52:56
bash使うなよ
88:名無しさん@お腹いっぱい。
09/07/17 22:25:33
bashはLinux板でやれ
89:名無しさん@お腹いっぱい。
09/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:名無しさん@お腹いっぱい。
09/07/18 00:36:24
POSIX準拠だから#!/bin/shでもいいはず、といってみる
91:名無しさん@お腹いっぱい。
09/07/18 01:40:37
/bin/shにはPOSIX shellを置く、なんてことはPOSIXに書いてない
92:名無しさん@お腹いっぱい。
09/07/21 13:50:12
シェルスクリプトでドラッグアンドドロップできる?
93:名無しさん@お腹いっぱい。
09/07/21 14:12:21
>>92
目的は何?
94:名無しさん@お腹いっぱい。
09/07/21 14:32:02
>>93
目的がわかっても答えられないのに逆質すんな。
95:名無しさん@お腹いっぱい。
09/07/21 14:38:10
あぁ、釣りか。
つられちゃったw てへっ?☆
96:92
09/07/21 15:19:06
ちょっと思いついたので聞いてみただけです。目的はありません。
97:名無しさん@お腹いっぱい。
09/07/22 01:01:27
シェルスクリプトで手マンできますか?
98:名無しさん@お腹いっぱい。
09/07/22 01:03:03
>>97
目的は何?
99:sage
09/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:名無しさん@お腹いっぱい。
09/07/22 15:45:09
どうみても使えるとは書いていませんが、何を見ているのでしょうか?
URLリンク(docs.sun.com)
101:名無しさん@お腹いっぱい。
09/07/22 16:14:27
>>99
Solarisの/bin/shのreadは、-rには対応していません。
bashか、zshか、kshを使いましょう。
102:名無しさん@お腹いっぱい。
09/07/22 16:18:57
>>99
どうしても /bin/sh だけでやりたい場合、
read -r aaa
の代わりに、
aaa=`head -1`
とやる方法がある。
103:sage
09/07/22 16:32:21
ありがとうございます。
>>100
-r 使えないんですね。
URLリンク(docs.sun.com)
を見て、標準のオプションなのかなと思い込んでました。
>>101
やっぱり他のシェルにするべきなのか
検討します。
>>102
その様な方法もあるんですね。勉強になります。
今回使用できるのか検討します。
104:名無しさん@お腹いっぱい。
09/07/22 16:32:27
なるほどねえ
105:名無しさん@お腹いっぱい。
09/07/22 16:34:43
>>103
> URLリンク(docs.sun.com)
sh のとこに -r 書いてないじゃん。
106:名無しさん@お腹いっぱい。
09/07/22 16:39:22
docs.sun.com に書いてあるのは、外部コマンド版の /usr/bin/readじゃん。
中身はkshスクリプト。
これって、結局シェル変数が親プロセスに渡らないから意味ないし、
外部コマンド版の /usr/bin/cd と並んで意味不明コマンドのひとつなんだよな。
107:名無しさん@お腹いっぱい。
09/07/22 16:40:44
>>106
いや、/usr/bin/read 以外にシェルの内部コマンドについても書いてあるよ。
108:名無しさん@お腹いっぱい。
09/07/22 16:44:04
>>107
そんなことは知ってるよ。
そうじゃなくて、/usr/bin/readのアフォさ加減について話題を振りたいわけだが。
109:名無しさん@お腹いっぱい。
09/07/22 16:46:03
>>106の書き方じゃ知ってたかどうかわからんよ。
110:名無しさん@お腹いっぱい。
09/07/22 16:50:18
質問者の >>99 が、shの内部コマンドのreadは使えなくても、
shから/usr/bin/readを呼び出せば使える、と勘違いしていた可能性もあるわな。
111:名無しさん@お腹いっぱい。
09/07/22 17:04:48
>>108
POSIX標準では、
・$0 "$@"で実装できるからシステムの負担にはならない
・いい使い方があるかも知れない
・対称性のため
などと存在理由を説明しています。
112:名無しさん@お腹いっぱい。
09/07/22 17:26:25
>>111
>・対称性のため
なら、なぜ、eval exit export wait などについては
外部コマンド版がないのか合理的な説明をお願いします。
113:名無しさん@お腹いっぱい。
09/07/22 17:35:26
POSIX仕様には書いてありません。
114:名無しさん@お腹いっぱい。
09/07/22 17:41:28
POSIX標準がそう決めた理由を聞いているのに、
「POSIX仕様には書いてありません」は循環論法。
115:名無しさん@お腹いっぱい。
09/07/22 17:53:32
>>111に理由聞いてもしょうがないんじゃね。
116:名無しさん@お腹いっぱい。
09/07/22 17:56:28
使えない外部コマンドがあるくせに、
Solarisでは /usr/bin/[ が削除されてるんだよなぁ。
ほんとわけわからん。
117:名無しさん@お腹いっぱい。
09/07/22 17:57:33
>>116
使いたいの?
118:名無しさん@お腹いっぱい。
09/07/22 17:59:48
v7shをもってきて使いたくなるかもしれないじゃないか
119:名無しさん@お腹いっぱい。
09/07/22 18:16:31
>>117
使いたいかどうかじゃなくて、
/usr/bin/[ は、呼び出せば動作する。
一方、/usr/bin/read とか、/usr/bin/umask とかは readや umaskの動作はしない。
動作するものを削除して、動作しないものを配置することの馬鹿さを言ってるんだが。
120:名無しさん@お腹いっぱい。
09/07/22 18:56:40
あってもなくても害がないならどっちでもいいじゃん。
馬鹿と非難するほどのことでもないと思うけど。
121:名無しさん@お腹いっぱい。
09/07/22 19:39:41
これ、正しいか?
URLリンク(docs.sun.com)
> 例 1 read コマンドの例
>
> 以下に示す /usr/bin/read の例は、入力ファイルの内容を、各行の先頭フィールドを最後尾に 移動して出力するものです。
> example% while read -r xx yy
> do
> printf "%s %s\n" "$yy" "$xx"
> done < input_file
122:名無しさん@お腹いっぱい。
09/07/22 20:12:29
マニュアルのバグだね。send-prしといてね。
123:名無しさん@お腹いっぱい。
09/07/23 03:48:55
AIX5.2,5.3で2Gを超えるディレクトリをtarで固めるにはどうすればいいのでしょうか?
124:名無しさん@お腹いっぱい。
09/07/23 15:41:48
man tarとすると、ustarヘッダーの書式を使用すると、ファイルサイズを最大8GBにできます。
とあるのですが、具体的にどうすれば2GB以上のファイルをtarで扱えるようになるのでしょうか?
125:名無しさん@お腹いっぱい。
09/07/23 17:05:40
まず、適切な質問の方法を学びましょう。
126:名無しさん@お腹いっぱい。
09/07/23 17:05:54
これは「シェルスクリプト」なのか ?
まぁとりあえずAIX 5.2では可能らしい
URLリンク(d.hatena.ne.jp)
US-TARかどうかは適当に固めたものを用意してcatで確認したらいい
ustarの文字が入ってたらUS-TARの形式
ほかに
ファイルシステムの問題かも知れない。何使ってる ?
/tmpの残り容量の問題かも知れない。十分ある ?
127:名無しさん@お腹いっぱい。
09/07/23 17:52:21
>>125
まず、適切な回答の方法を学びましょう。
わからないなら黙っていましょう。
128:名無しさん@お腹いっぱい。
09/07/23 17:58:09
AIXスレ行け。
129:名無しさん@お腹いっぱい。
09/07/23 18:06:20
>>127
クズは黙ってろ。
130:名無しさん@お腹いっぱい。
09/07/23 18:15:49
>>123 の質問がとくに不適切とも不備な質問とも思えない。
実際にAIXで2GB超のファイルをtarで固めた経験がある者なら
>>123 を見ただけで即答できるはずだ。
質問の仕方に注文を付けたり、さらに「○○の結果は?」とか追加情報を求める回答者は
その追加情報があっても答えられないダメ回答者。
131:名無しさん@お腹いっぱい。
09/07/23 18:17:42
おかしな煽り野郎が張り付いている模様です。
しばらく放置しましょう。てか、元の質問がシェルスクリプトの質問じゃねぇし。
132:名無しさん@お腹いっぱい。
09/07/23 18:18:36
シェルスクリプトスレで質問するのは適切ではない。言い訳してないで。消えろ。
133:名無しさん@お腹いっぱい。
09/07/23 18:20:43
その tarを シェルスクリプトの中で使う予定なんですぅ、、
134:名無しさん@お腹いっぱい。
09/07/23 18:22:24
言い訳してないで。消えろ。カス。
135:名無しさん@お腹いっぱい。
09/07/23 18:27:49
AIX5.2とAIX5.3です。
以下のようなシェルを発行したところ、
dir以下に2GBを越えるファイルがあるとエラーになります。
どのように修正すればよろしいか?
#!/bin/sh
tar cvf hoge.tar dir
136:名無しさん@お腹いっぱい。
09/07/23 18:36:21
詰まらん。消えろ。クズ。
137:名無しさん@お腹いっぱい。
09/07/23 20:43:57
>>126
ありがとうございます。
USTARの文字ははいっていました。
TMPには空きがあります。
ファイルシステムについては、よくわかりません。
138:名無しさん@お腹いっぱい。
09/07/23 21:51:51
>>137
2G制限ならulimitを確認。
8G制限はどうにもならないのでGNU tarでも使ったら?
で「シェルスクリプトで必要だから」という理由で環境依存の
質問をシェルスクリプト一般のスレでやっても煙たがられるだけ
というありがたい指摘を、そろそろ受けいれたらどうかな?
139:名無しさん@お腹いっぱい。
09/07/23 23:39:41
>>138
ありがとうございます。
今帰りなので、週末に調べてみます。
140:名無しさん@お腹いっぱい。
09/07/26 07:59:26
ulimitはunlimitedでした。引続きお願いします。
141:名無しさん@お腹いっぱい。
09/07/29 12:57:14
スレ違いだと何度いったらわかるんだ。池沼。消えろ。
142:名無しさん@お腹いっぱい。
09/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:名無しさん@お腹いっぱい。
09/07/31 20:48:07
>>142
echo "$unko"
144:名無しさん@お腹いっぱい。
09/08/01 23:50:17
シェルを2つ以上コマンドで開くことは出来る?
今はパネルからクリックしてるので大変。
でも、コマンド売っても出てこない><
ちなみに端末エルミネーターはBASH。
145:名無しさん@お腹いっぱい。
09/08/01 23:52:35
はいはい 15点
146:名無しさん@お腹いっぱい。
09/08/02 05:00:19
>>142
配列(パイオツじゃないよ)使うんじゃだめなの?
147:名無しさん@お腹いっぱい。
09/08/02 09:40:59
>>146
>>143
148:名無しさん@お腹いっぱい。
09/08/02 13:13:29
>>142
シェル変数の展開時は、ダブルクォートでくくるのが原則。
それで、改行もスペースもそのまま保存される。
逆に、単純に展開する場合は ${ } でくくる必要はない。
149:名無しさん@お腹いっぱい。
09/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:名無しさん@お腹いっぱい。
09/08/03 01:39:05
. や source は起動されてないし
151:名無しさん@お腹いっぱい。
09/08/03 02:40:17
そこをなんとか・・
152:名無しさん@お腹いっぱい。
09/08/03 04:37:49
bash依存
$ echo 'echo $BASH_SOURCE' > /tmp/t.sh
$ . /tmp/t.sh
/tmp/t.sh
153:名無しさん@お腹いっぱい。
09/08/03 06:26:10
>>152
bash3以降依存だね。bash2だと動作しない。
154:名無しさん@お腹いっぱい。
09/08/03 07:19:14
>>149
先頭で自分の名前を変数に代入すれば?
155:名無しさん@お腹いっぱい。
09/08/03 07:24:49
>>154
全然解決になりません。
同じスクリプトを複数のファイル名でハードリンクしていて、
呼ばれた名前によって動作を切替えたいので。
156:名無しさん@お腹いっぱい。
09/08/03 07:28:15
もう $BASH_VERSION チェックして $BASH_SOURCE 使えよ。
157:名無しさん@お腹いっぱい。
09/08/03 08:19:17
そもそも.でもsourceでも名前わかってなきゃ呼べないよね
呼べるってことは名前わかってるじゃん
あほじゃないの?
$_とかでもいいんじゃないの?
158:名無しさん@お腹いっぱい。
09/08/03 08:39:57
>>157
惜しいけど、
hoge=file
source $hoge
みたいに、変数経由で呼ぶと、
$_ では名前を取得できないから NG。
159:名無しさん@お腹いっぱい。
09/08/03 08:43:04
>>157
シェル依存。
ashとかでは、sourceファイル内一発目の $_ は、$0 と同じ値になってる。よって不可。
160:名無しさん@お腹いっぱい。
09/08/03 20:41:06
>>155
>同じスクリプトを複数のファイル名でハードリンクしていて、
>呼ばれた名前によって動作を切替えたいので。
それは(+sourceした時にまで対応したいという)発想に無理があるのでは
161:名無しさん@お腹いっぱい。
09/08/03 20:48:50
>>160
わからないなら黙ってろ
162:名無しさん@お腹いっぱい。
09/08/03 21:10:02
シェル非依存な方法はないから。
163:名無しさん@お腹いっぱい。
09/08/04 01:00:01
関数内のexitをreturnと同じように振舞わせる方法はないでしょうか。
現場で共通利用している共通関数の定義ファイルを . で読込んで使っているのですが、、、
お目当ての共通関数は、関数内でエラーだった場合、ログ吐いてexitまでしてしまい、困りました。
エラーコードで返してくれさえすれば、処理自体はそのまんま使いたいのですが。。。
その共通関数の戻り値はreturnでは返されず、共通関数内で定義した変数に格納され、呼び元でその変数を使う作りになっています。
何卒よろしくお願いします。
164:名無しさん@お腹いっぱい。
09/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:名無しさん@お腹いっぱい。
09/08/04 06:39:16
>>164
read -r
あと、円マークじゃなくてバックスラッシュが表示されるように設定しろ
166:名無しさん@お腹いっぱい。
09/08/04 06:44:51
>>163
alias exit=return
. hoge
unalias exit
167:名無しさん@お腹いっぱい。
09/08/04 08:37:30
>>163
result=`. hoge;echo \$result`
168:名無しさん@お腹いっぱい。
09/08/04 08:43:41
>>167
「.」でソースしてるファイル内で「関数定義」をしているので、
それだとサブシェル扱いになるので、リターンすると関数定義が消えてしまうので
解決になりません。(戻り値が必要なのではありません)
169:名無しさん@お腹いっぱい。
09/08/04 08:58:38
条件後出しすんなよ。そういうことなら
(共通関数)
条件後出しのお代りか?
170:名無しさん@お腹いっぱい。
09/08/04 09:06:40
>>169
後出しじゃないだろ
>>163
>共通関数の定義ファイル
171:名無しさん@お腹いっぱい。
09/08/04 09:09:35
>>166 で解決でしょ。
sourceしたファイル内で returnできるshには、aliasもあるから。
172:名無しさん@お腹いっぱい。
09/08/04 09:21:24
見てきたように嘘をつくなあ、純正shはreturnあって、alias無い。
173:名無しさん@お腹いっぱい。
09/08/04 09:27:17
>>172
> 「sourceしたファイル内で return」
純正shは、関数の中でしかreturnできない。
sourceしたファイル内で returnすると、純正シェルではエラーになる。
嘘はお前。
174:名無しさん@お腹いっぱい。
09/08/04 09:58:18
嘘つきはどちらでしょうか?
> お目当ての共通関数は、関数内でエラーだった場合、ログ吐いてexitまでしてしまい、困りました。
175:163
09/08/04 12:35:58
みなさんたくさんのレスありがとうございます。
>>166を使って相談してみたところ怪訝な顔をされてしまい、
結局「共通関数のコピペで別の関数(exit→returnだけ)を作れ」
となってしまいました。。。
※個人的には、その方がよっぽど怪訝な顔したいですが。。。
とても勉強になりました。ありがとうございました!
176:名無しさん@お腹いっぱい。
09/08/04 13:39:20
>>172
質問者(>>175)が、「>>166(alias)を使って相談してみた」って言ってるから、
やっぱりaliasが使えるシェルだったということで、>>171 が正しかったじゃん。
177:名無しさん@お腹いっぱい。
09/08/04 13:44:25
たまたま使えただけ。↓は赤っ恥全開の嘘。
> sourceしたファイル内で returnできるshには、aliasもあるから。
178:名無しさん@お腹いっぱい。
09/08/04 13:45:27
>>177
「sourceしたファイル内で returnできるshには、aliasもある」は正しいが。
179:名無しさん@お腹いっぱい。
09/08/04 13:50:33
恥の上塗りミットも茄子。
シェル関数内でのexitを書き換える為には↓これでは十分じゃないから。
> sourceしたファイル内で returnできるshには、aliasもあるから。
180:名無しさん@お腹いっぱい。
09/08/04 13:53:53
>>179
おまえ、意味取り違えてるよ。
シェル関数じゃなくて、sourceしたファイルを中途終了するときに、
returnが使えるんだよ。(純正シェルだと使えない)
(exitを使うとsourceした元のシェル自体が終了するので使えない)
そういう新しい機能のreturnが使えるシェルなら、aliasも使える。
181:名無しさん@お腹いっぱい。
09/08/04 13:58:38
>>180
とぼけようと必死だな。質問者のお題(>>163)は関数内のexitを再定義すること。
> 関数内のexitをreturnと同じように振舞わせる方法はないでしょうか。
「sourceしたファイル内でのreturn」は全然関係ない。
182:名無しさん@お腹いっぱい。
09/08/04 14:08:28
>>172 は、
>>171 「sourceしたファイル内で returnできるshには、aliasもある」
のことを「嘘」だと言った。
その >>172 は間違い。
(>>172 では、元の質問のことには触れられていないから、
>>171 自体を質問に関係なく「嘘」と決めつけている。それは当然間違い)
「sourceしたファイル内で returnできるshには、aliasもある」は正しい。
183:名無しさん@お腹いっぱい。
09/08/04 14:09:10
彼らは何のために戦っているのだろう。
184:名無しさん@お腹いっぱい。
09/08/04 14:11:55
なぜ「彼」と限定できるんですか? エスパーですか?
185:名無しさん@お腹いっぱい。
09/08/04 14:13:25
エスパーですよ。
186:名無しさん@お腹いっぱい。
09/08/04 14:14:22
>>173 に指摘されるまでは、
>>172 は関数外での returnの用法を知らなかったんだろう。
187:名無しさん@お腹いっぱい。
09/08/04 14:14:44
>>182
無様杉。引っ込んでろ。
188:名無しさん@お腹いっぱい。
09/08/04 14:17:13
>>187
一般的に、>>187 みたいに論理的な指摘が一切含まれていない暴言を先に吐いた方が
議論の負け。
189:名無しさん@お腹いっぱい。
09/08/04 14:19:02
>>186
お前も引っ込んでろ。
190:名無しさん@お腹いっぱい。
09/08/04 14:20:12
一般的に、言い訳満開の>>176で既に大敗。
191:名無しさん@お腹いっぱい。
09/08/04 14:22:19
>>190
「一般的に」の日本語の用法を間違っています。
192:名無しさん@お腹いっぱい。
09/08/04 15:10:29
一般的に、「日本語の用法」とか関係ないところにケチ付け始めたところで負け。
193:名無しさん@お腹いっぱい。
09/08/04 15:14:22
用法、容量を守ってご使用ください。
194:名無しさん@お腹いっぱい。
09/08/04 15:55:43
YO! HO!
195:名無しさん@お腹いっぱい。
09/08/04 15:59:03
用法・用量な
196:名無しさん@お腹いっぱい。
09/08/04 19:46:10
追試してみるから純正shってのがどれなのか教えてくれ
197:名無しさん@お腹いっぱい。
09/08/04 19:50:56
>>180が言うところの「そういう新しい機能のreturnが使えるシェルなら、
aliasも使える。」じゃないシェルだろ。
198:名無しさん@お腹いっぱい。
09/08/04 20:13:58
>>196 そりゃ純正というくらいだから Sixth Edition とか Seventh Edition とかについてきたやつじゃないの
199:名無しさん@お腹いっぱい。
09/08/04 20:16:29
純正シェルには、return以前にシェル関数自体がないから。
200:名無しさん@お腹いっぱい。
09/08/04 20:19:43
Solaris10の/bin/sh: ×「.」の中でのreturn / × alias
FreeBSDの/bin/sh: ○「.」の中でのreturn / ○ alias
bash: ○「.」の中でのreturn / ○ alias
zsh: ○「.」の中でのreturn / ○ alias
ksh: ○「.」の中でのreturn / ○ alias
201:名無しさん@お腹いっぱい。
09/08/05 00:56:33
FreeBSDの/bin/shってボーンシェルじゃないの?もしかして
202:名無しさん@お腹いっぱい。
09/08/05 01:33:46
もしかしても糞もなくボーンシェルじゃありません
203:名無しさん@お腹いっぱい。
09/08/05 02:09:21
BシェルというのはBourne Shell=/bin/sh だと思ってたけど違うの?
ボーンシェルでない/bin/shというのはBシェルでもなく一体なんなんですか?
204:名無しさん@お腹いっぱい。
09/08/05 02:17:07
>>1読めよ
205:名無しさん@お腹いっぱい。
09/08/05 06:22:27
Bourne Shell ≠ ボーンシェル
Bourne Shell = ブールネシェル
206:名無しさん@お腹いっぱい。
09/08/05 17:46:17
>>201 >>203
どのバージョンからかだったかは忘れたが、
FreeBSD や NetBSD の /bin/sh は Bourne Shell ではなくその互換再実装の Almquist Shell だよ
>AUTHORS
> This version of sh was originally written by Kenneth Almquist.
207:名無しさん@お腹いっぱい。
09/08/05 19:45:44
386BSDはすでにashだった。
208:名無しさん@お腹いっぱい。
09/08/06 06:48:56
>>206
なるほど、ashはbourne shellであってはいけないのか。
URLリンク(en.wikipedia.org)
> Due to copyright issues surrounding the Bourne Shell as it was
> used in historic CSRG BSD releases, Kenneth Almquist developed
> a clone of the Bourne Shell
209:名無しさん@お腹いっぱい。
09/08/06 15:38:32
44,555
34,567
0
143,456
1,235,004
44
0
0
55
みたいな数字の列があるのですが、これのトータルを計算したいと思ってます。
問題は数字の3桁ごとに,が入ってることなのですが、Bashスクリプトでこれを取りつつ合計を計算
する方法ってあるでしょうか?
どうかよろしくお願いします。
210:名無しさん@お腹いっぱい。
09/08/06 15:54:06
sed -e "s/,//g"
で出来ましたが、合計の計算ができません。
44555
34567
0
143456
1235004
44
0
0
55
から、全部の合計を出したいです。
211:名無しさん@お腹いっぱい。
09/08/06 15:57:01
sed -e "s/,//g" | xargs echo | sed -e "s/ /+/g" | bc
これで出来た。
212:名無しさん@お腹いっぱい。
09/08/06 15:59:44
何万行もあると破綻しそうな
213:名無しさん@お腹いっぱい。
09/08/06 16:17:27
>>209
#!/bin/bash
n=0
while IFS=, read line
do
((n += line))
done
echo $n
214:名無しさん@お腹いっぱい。
09/08/06 16:25:39
>>213
それ、カンマの除去処理がおかしい
>>209
#!/bin/bash
n=0
while read line
do
((n += ${line//,/}))
done
echo $n
215:名無しさん@お腹いっぱい。
09/08/06 17:07:33
{ echo 0; sed -e 's/,//g' -e 's/$/+/'; echo p; } |dc
216:名無しさん@お腹いっぱい。
09/08/06 17:12:10
sed 's/,//g'| paste -s -d+ | bc
217:名無しさん@お腹いっぱい。
09/08/06 17:22:53
>>215
それだったら、
sed 's/,//g; s/$/+/; $s/$/0/' | bc
の方が簡潔。
218:名無しさん@お腹いっぱい。
09/08/06 17:31:47
>>217
bcだと、途中改行できないから不可。
sedでさらに行末にバックスラッシュを付加してやればそれでも動くかな。
>>215
echoとsedと一緒に使うと無駄。
sed '1s/^/0 /; s/,//g; s/$/+/; $s/$/p/' | dc
でいいだろ。
219:名無しさん@お腹いっぱい。
09/08/06 17:34:20
>>217
実行してから因縁つけろ。カス
sed 's/,//g; s/$/+/; $s/$/0/' file| bc
(standard_in) 2: syntax error
(standard_in) 3: syntax error
(standard_in) 4: syntax error
(standard_in) 5: syntax error
(standard_in) 6: syntax error
(standard_in) 7: syntax error
(standard_in) 8: syntax error
(standard_in) 9: syntax error
220:名無しさん@お腹いっぱい。
09/08/06 17:42:32
みなさん、質問を良く読みましょうね。
>>209 さんは、
> Bashスクリプトで
って言ってますよ。
よって、>>214 が正解ですね。
すでに正解が出ているのに >>215 以降に何か書いてるおともだちがいますが、
Bashも使っていないし、質問の答としてはふさわしくありませんね。
221:名無しさん@お腹いっぱい。
09/08/06 17:44:22
Bash: not found だから>>214は不正解だな。
222:名無しさん@お腹いっぱい。
09/08/06 17:58:51
>>221
そういうことしか言えないようだから >>214 が正解だな
223:名無しさん@お腹いっぱい。
09/08/06 23:36:58
>>218
それで処理すると、
dc: stack empty
dc: stack empty
dc: stack empty
と出ます。
224:名無しさん@お腹いっぱい。
09/08/07 07:05:39
>>223
スペースも含めてちゃんとコピペしろ。
225:名無しさん@お腹いっぱい。
09/08/10 15:20:35
シェルスクリプトって、ほんとツンデレだよな。
理解するまで四苦八苦ツンツンしてるくせに、一旦わかってしまうと、とたんにデレデレ。
226:名無しさん@お腹いっぱい。
09/08/10 16:25:01
別にそれはシェルスクリプトに限ったことでもなかろう
227:名無しさん@お腹いっぱい。
09/08/11 18:17:01
しばらく使わないと忘れちゃってまたツン期に入るのが…
228:名無しさん@お腹いっぱい。
09/08/11 23:15:11
bashで変数の置換と切り出しとかを一緒にできないですかね?
echo ${HOGE//a/A}
echo ${HOGE:0:8}
これをひとつにしたい感じです
229:名無しさん@お腹いっぱい。
09/08/12 00:02:16
もちろん、できません
230:名無しさん@お腹いっぱい。
09/08/15 15:52:19
bash です。
date | read HOGE
これやっても変数 HOGE が空なんだけど、どうして?
231:名無しさん@お腹いっぱい。
09/08/15 15:55:14
readはサブシェルで実行されて瞬殺で終了するから。
232:230
09/08/15 16:05:15
>>231
即答サンクス!
そうだった、パイプラインはそれぞれサブシェルで動くんだった。
つーことは、date 出力を変数に入れるには、素直に
HOGE=`date`
でよい、と。
233:名無しさん@お腹いっぱい。
09/08/15 16:57:18
>>232
× パイプラインはそれぞれサブシェルで動く
○ 1個以上のパイプを含んだパイプラインはそれぞれサブシェルで動く
普通のコマンド1個だけでも「パイプライン」なので。
234:232
09/08/15 17:37:04
>>233
訂正サンクス!
確かに。
サブシェルと「環境」について、いまいち理解できない…
235:名無しさん@お腹いっぱい。
09/08/15 17:47:10
バッドノウハウよりもっと有用な事を覚えよう
236:名無しさん@お腹いっぱい。
09/08/15 20:09:24
バッドノウハウを覚えることは有益
バッドノウハウをあれこれ考えることは無益
237:名無しさん@お腹いっぱい。
09/08/15 20:50:30
バッドノウハウって、具体的に何のこと言ってるの?
238:名無しさん@お腹いっぱい。
09/08/15 20:55:52
定義にこだわるふりをして、干されている現実から目をそらす>>233の手法。
239:名無しさん@お腹いっぱい。
09/08/17 06:30:05
la -Alでファイルサイズとファイル名のみほしいので
la -Al | cut -d " " -f 5,9
とかやるとうまくいきません。どうすればいいですか?
240:名無しさん@お腹いっぱい。
09/08/17 06:43:43
>>239
cutでうまういかないのは、複数のスペースがすべて「区切り」とみなされるから。
awk使った方がいい
↓
ls -Al | awk '{print $5 " " $9}'
241:名無しさん@お腹いっぱい。
09/08/17 07:29:22
>>240
awkはシェルにあらず。
シェルスレなんだからシェルでやれ
ls -lA | while read line; do set -- $line; echo $5 $9; done
242:名無しさん@お腹いっぱい。
09/08/17 08:51:13
>>239>>240
あざーす
もうひとつ聞きたいのですが
文字列の先頭の1文字目のみ切り出す
ってどうやればいいでしょうか?
val1=abc
val1=`expr "$val1" : "\(.\).*"`
とかでいいですか?
243:名無しさん@お腹いっぱい。
09/08/17 09:38:43
>>242
bashなら、
var=abc
echo "${var:0:1}"
244:名無しさん@お腹いっぱい。
09/08/17 12:23:11
>>243
あざーす
245:名無しさん@お腹いっぱい。
09/08/17 17:19:44
>>241
> awkはシェルにあらず。
> シェルスレなんだからシェルでやれ
濡れた。
アッーーーー
246:名無しさん@お腹いっぱい。
09/08/17 21:32:10
便乗質問。
>>241 の手法に感心したんだけど、わざわざ set で位置パラメータを再設定して
使うっていう方法は、普通にアリなの?
set はシェル動作制御用コマンドの側面が強くないですか? そうでもない?
247:名無しさん@お腹いっぱい。
09/08/17 21:51:50
>>246
set使わずに、
↓でもいいんだけどね
ls -lA | while read x x x x s x x x f x; do echo $s $f; done
248:名無しさん@お腹いっぱい。
09/08/17 23:25:45
(純正シェルで)使える機能は何でも使うのがシェルプログラミングの作法。
249:246
09/08/17 23:51:47
>>247
これはすげえ! 強引!w
>>248
そうかあ。使えるものは使う、と。自分専用ツールならなおさらだね。
ううむ、シェルは深いなあ。でも楽しい。
覚えると明らかに生産性が上がる。
250:名無しさん@お腹いっぱい。
09/08/18 00:57:44
>>247
すげえ・・・目から鱗・・・
251:名無しさん@お腹いっぱい。
09/08/18 11:43:54
>>247はわりとよく見かけると思うが……。
>>241の方法は元々の$@が破壊されるのでよほどのことがないかぎりやらない。
252:名無しさん@お腹いっぱい。
09/08/18 11:51:59
>>251
>>241 の方法を使っても、readのパイプがサブシェルだから、
それを抜けたら $@ は破壊されていない。
253:名無しさん@お腹いっぱい。
09/08/20 01:48:49
echo に渡すのがスマートでないですか?
ls -Al | xargs -l echo | cut -d" " -f5,9
254:名無しさん@お腹いっぱい。
09/08/20 01:51:38
というか
ls -Al | xargs -l | cut -d" " -f5,9
これでよかった・・・・
255:名無しさん@お腹いっぱい。
09/08/20 16:46:23
で、改行、空白を含むファイル名を正しく扱えるのはどの回答?
256:名無しさん@お腹いっぱい。
09/08/20 16:52:37
>>255
ls 使ってる時点で改行、空白を含むファイル名は最初から考えられてない。
257:名無しさん@お腹いっぱい。
09/08/20 21:13:57
コマンドなしのxargsってどういう意味?
258:名無しさん@お腹いっぱい。
09/08/20 21:16:00
>>257
2個以上のスペースを1個だけにするもの。
>>240 も参照。
259:名無しさん@お腹いっぱい。
09/08/20 21:26:14
echoの省略形
260:名無しさん@お腹いっぱい。
09/08/20 21:32:38
>>259
それは知ってるよ(>>253)。そのechoが何の意味があるかの質問だろ。
261:名無しさん@お腹いっぱい。
09/08/21 09:59:17
だから2個以上のスペースを1個にするんだって。
262:名無しさん@お腹いっぱい。
09/08/21 10:10:39
そもそも human readableな ls の output を filtering するというのが
bad design なんんだよな。
次期 ls には是非、
--format='%f %s' 的な optionを appendしていただくことを wishする。
263:名無しさん@お腹いっぱい。
09/08/21 10:14:50
stat(1)あたりをposixに入れる方が早くないか?
264:名無しさん@お腹いっぱい。
09/08/21 12:51:07
>>262
英語使って、かっこつけているつもり?
265:名無しさん@お腹いっぱい。
09/08/21 16:40:18
ルー語はカッコよかったんか
266:名無しさん@お腹いっぱい。
09/08/22 11:36:50
csh の存在価値はなんだろう。
bash でいいじゃん。
267:名無しさん@お腹いっぱい。
09/08/22 12:07:49
それはこっちで
↓
C shell 撲滅委員会
スレリンク(unix板)
268:名無しさん@お腹いっぱい。
09/08/22 18:50:28
bashが無駄に重くなっていってくれたおかげで
tcshは無難に使えるログインシェルという位置を確保できたw
そしていろいろと便利な設定をするためにcshスクリプトの書き方を知る必要がある。
269:名無しさん@お腹いっぱい。
09/08/22 19:37:03
ksh93を使ってる俺は勝ち組
270:名無しさん@お腹いっぱい。
09/08/25 17:34:40
質問です
1 12 123
1 2 23
のようなテキストを
xx1xx12x123
xx1xxx2xx23
(x=空白)
のように幅を揃えるにはどうすればいいですか?
271:名無しさん@お腹いっぱい。
09/08/25 17:44:42
awk '{printf("%3d%3d%4d\n",$1,$2,$3);}' < test.txt
272:名無しさん@お腹いっぱい。
09/08/25 17:50:50
>>271
勝手に桁数決め打ちしていいのか?
同じカラム上にある最大桁数をサーチした上で %*d (*は数字)に
しなければならないという質問だと思うが。
273:名無しさん@お腹いっぱい。
09/08/25 17:57:58
それは質問者が言うべきこと。
274:270
09/08/25 18:09:22
すいません。実際の数字は一行に数千あって行も数千あります。
でも一つの区切りの中の数字は三桁までです。
275:名無しさん@お腹いっぱい。
09/08/25 18:15:40
絵に描いたような後出しw
276:ruby,perl等のほうが早いかも
09/08/25 19:34:46
>>274
一行にある数字の数は固定している?それとも変動もある?
277:名無しさん@お腹いっぱい。
09/08/25 21:29:45
>>270 >>274
#!/bin/sh
while read line
do
set $line
while [ $# -ge 1 ]
do
printf '%3d ' $1
shift
done
echo
done
278:名無しさん@お腹いっぱい。
09/08/25 21:30:54
>>276
固定してます。
279:名無しさん@お腹いっぱい。
09/08/25 21:36:54
>>277
だったら forの方がいい。
#!/bin/sh
while read line
do
for n in $line
do
printf '%3d ' $n
done
echo
done
>>278
直前の回答読めよ。
280:名無しさん@お腹いっぱい。
09/08/25 21:44:07
すいませんリロードしてませんでした。
上手く行きそうです。みなさんありがとうございました。
281:名無しさん@お腹いっぱい。
09/08/26 00:47:55
>>279
| sed 's/ $//'したいな
282:名無しさん@お腹いっぱい。
09/08/26 06:48:36
>>279
いや、行末のスペースを取ることを考えると、
>>277 の方式の方がいいんだよ。
#!/bin/sh
while read line; do
set -- $line
while [ $# -ge 2 ]; do
printf '%3d ' $1
shift
done
if [ $# -eq 1 ]; then
printf '%3d' $1
fi
echo
done
283:名無しさん@お腹いっぱい。
09/08/27 11:50:33
execute.shellを実行し、psコマンドを実行すると以下のように表示されます。
PID TTY TIME CMD
13219 pts/1 00:00:00 bash
17938 pts/1 00:00:30 java
17222 pts/1 00:00:37 java
25353 pts/1 00:00:00 ps
CMDのjavaがexecute.shellのプロセス名みたいなんですが、
これをexcecuteと表示させることは可能ですか?
284:名無しさん@お腹いっぱい。
09/08/27 12:28:06
>>283
コマンド自身がargv[0]を書き換えてるか、
またはexecute.shellは単なる起動スクリプトで、実際にjavaがexecされてるから、
元のコマンドのexcecuteを表示させることは無理。
285:名無しさん@お腹いっぱい。
09/08/27 12:39:26
コマンドライン引数にかけらが有るかもしれない。
ps -a
286:名無しさん@お腹いっぱい。
09/08/27 13:59:26
>>284
了解です。レスありがとうございます。
>>285
ありがとうございます。
ps -aしてみましたが表示は変わらなかったです。
2重起動を防止するため、プロセス名を取得しようとしていたのですが無理のようなのであきらめました。
PID番号付きのファイルを作成することにしました。ファイルはなるべく作りたくなかったのですが。
287:名無しさん@お腹いっぱい。
09/08/27 17:29:53
sedコマンドをつかって
aaa|abc|bef|efg||||aa
の文字列(|は区切り文字)の一番最後のフィールドのaaの部分をbcdに変えて
aaa|abc|bef|efg||||bcd
と出力させるにはどのようにすればよいのでしょうか?
288:名無しさん@お腹いっぱい。
09/08/27 17:48:38
最後はどれもbcdに変えるのか、aaになってるものだけ変えるのか
289:名無しさん@お腹いっぱい。
09/08/27 17:54:37
>>287
sed指定の質問ならsedスレへ
↓
sed
スレリンク(unix板)
290:名無しさん@お腹いっぱい。
09/08/27 17:57:51
>>287
sed 's/|[^|]*$/bcd/'
291:名無しさん@お腹いっぱい。
09/08/27 17:58:17
sygwinでのbashなんですが
declare -a userhome
userhome=($(cut -d":" -f6 /etc/passwd))
とすると、/etc/passwdの6番目の要素がnullの場合
配列に何も代入されません。
何か文字を代入したい場合はどうすればいいんでしょうか?
292:名無しさん@お腹いっぱい。
09/08/27 18:04:24
>>291
userhome=($(cut -d":" -f6 /etc/passwd | sed 's/^$/none/'))
293:名無しさん@お腹いっぱい。
09/08/27 18:10:41
>>290
ありがとうございます
294:名無しさん@お腹いっぱい。
09/08/27 18:15:40
#!/bin/sh
s="~/work/"
ls $s
としても、 No such file or directoryと言われます。
たぶん~が展開されていないと思うのですが、
どうすれば展開できますか?
295:名無しさん@お腹いっぱい。
09/08/27 18:26:29
>>294
eval ls $s
または、最初から
s=?/work/
で代入。(ダブルクォートなし)
296:名無しさん@お腹いっぱい。
09/08/27 18:37:12
>>288
> 最後はどれもbcdに変えるのか、aaになってるものだけ変えるのか
↑
そんなの質問の意図を読めばわかる。
>>290 みたいに回答した方が早い。
297:名無しさん@お腹いっぱい。
09/08/27 18:48:08
>>290
sed 's/|[^|]*$/|bcd/'
だろw
>>293
ありがたいか?w
298:名無しさん@お腹いっぱい。
09/08/27 19:10:28
>>294
由緒正しきshは~は使えない。$HOME使え。
299:名無しさん@お腹いっぱい。
09/08/27 19:28:05
トホホの自民 生き残れるのはひと握り
大マスコミの選挙予測によると、自民党は壊滅状態で、当確を数えたほうが早いほど。
小選挙区で確実に生き残れるのは元・現閣僚が7人ほど、石原伸晃など地盤が強固な世襲議員が6人ほど、重鎮が3人。
ほかに5人程度のひと握り。自民党が少数政党に転落し、永田町の勢力図が一変する可能性だってある。
URLリンク(gendai.net)
300:名無しさん@お腹いっぱい。
09/08/27 21:04:45
便乗質問だけど、
>>298
チルダ展開は bash だけなの? sh は展開してくれない?
301:名無しさん@お腹いっぱい。
09/08/27 21:09:45
sh の種類による。
302:名無しさん@お腹いっぱい。
09/08/27 21:10:04
>>300
bashだけではない。
Solarisなどの純正sh以外、
ash ksh zsh dash 等、みんなチルダ展開には対応してる。
でも $HOMEを使う方がお勧め。
303:名無しさん@お腹いっぱい。
09/08/27 21:10:36
posix sh ならやってくれるはず
~ だけなら $HOME で間に合うが、~user はどうしようもないし
304:名無しさん@お腹いっぱい。
09/08/27 21:21:53
posix(笑)
305:名無しさん@お腹いっぱい。
09/08/27 21:24:00
>>303
IFS=:
set `getent passwd user`
echo $6
306:300
09/08/27 21:42:19
サンクス。
アムロ「マ ~ さーん!」
……すまん。
307:名無しさん@お腹いっぱい。
09/08/28 11:20:37
>>305
getent が使える環境で ~user の展開をしてくれないシェルって何があるの?
308:名無しさん@お腹いっぱい。
09/08/28 11:45:53
>>307
Solaris
309:名無しさん@お腹いっぱい。
09/08/28 12:28:29
可搬性を求めると csh -fc 'echo ~user' になるかな?
310:名無しさん@お腹いっぱい。
09/08/28 12:41:08
$ csh -fc 'echo ~user'
csh: not found
311:名無しさん@お腹いっぱい。
09/08/28 13:09:31
最近のLinuxの鳥はデフォではcsh入ってないからな
312:名無しさん@お腹いっぱい。
09/08/28 13:16:18
可搬性を求めてるから getentだろ。
313:名無しさん@お腹いっぱい。
09/08/28 13:44:58
可搬性なんて幻想
314:名無しさん@お腹いっぱい。
09/08/28 21:12:21
URLリンク(image.blog.livedoor.jp)
315:名無しさん@お腹いっぱい。
09/08/30 00:11:54
シェルスクリプトは奥が深すぎて、きりがない。
どこらへんまで身に付いたら、「シェルスクリプトは理解した」と納得していいのかな?
316:名無しさん@そうだ選挙に行こう
09/08/30 19:19:46
実行できたら出いいよ
317:名無しさん@お腹いっぱい。
09/08/30 21:21:06
すみませんが詳しい方のみ回答をお願いします
318:名無しさん@お腹いっぱい。
09/08/30 22:00:26
>>315
それが、公での質問の仕方として相応しい、と自分で納得し、的確な回答を期待できる質問文だ、と納得して書き込んだキミ。
>>316はキミの「納得していい」レベルに的確にあわせてくれたんだろwwww
結論、キミ次第。
別の回答がほしければ、他人の立場で>>315を読み直すことから始めよう。
319:315
09/08/31 21:53:35
なんだ? 俺の知らんうちに。 >>317 は誰だよ?w
>>318
自分次第、そうだねぇ。
いや、たとえば C とかなら、ポインタ、構造体を理解すれば初心者卒業とか、
具体的に言っているのをよく見かけるでしょ。そんなのを期待してたんだ、スマン。
とりあえず、元々 bash にある、起動まわりのスクリプトを読み解くことにするよ。
320:名無しさん@お腹いっぱい。
09/08/31 22:11:18
>>319
> なんだ? 俺の知らんうちに。
1ヶ月ROMってろ
321:名無しさん@お腹いっぱい。
09/09/01 02:26:03
「元々 bash にある、起動まわりのスクリプト」って何だ?
322:名無しさん@お腹いっぱい。
09/09/01 03:47:22
>>321
rcスクリプトのこととエスパー。
323:名無しさん@お腹いっぱい。
09/09/01 10:35:12
>>319
> いや、たとえば C とかなら、ポインタ、構造体を理解すれば初心者卒業とか、
> 具体的に言っているのをよく見かけるでしょ。そんなのを期待してたんだ、スマン。
そういった「目的」を明示しなかったのが問題だったのだよ。
きっと皆の脳裏には、破滅に向かうプロジェクトの上流工程が彷彿したお。
324:名無しさん@お腹いっぱい。
09/09/01 11:24:46
・パラメータ展開の修飾子を使いこなす
・リダイレクトを使いこなす
他には?
325:名無しさん@お腹いっぱい。
09/09/01 12:30:22
・evalを使いこなす
326:名無しさん@お腹いっぱい。
09/09/01 12:39:21
× evalを使いこなす
○ evalを使いこなしていばる
327:名無しさん@お腹いっぱい。
09/09/01 13:57:58
◎ evalは俺の嫁。
328:名無しさん@お腹いっぱい。
09/09/01 14:02:02
>>327
evil の間違いでしょ?
329:名無しさん@お腹いっぱい。
09/09/01 14:08:10
>>324
リダイレクトというより、ファイルディスクリプタを使いこなせるようになりたい。
330:名無しさん@お腹いっぱい。
09/09/01 14:24:51
初 evalる事覚える
中 evalらない事を覚える
上 たまにevalる事を覚える
331:名無しさん@お腹いっぱい。
09/09/01 16:28:10
あんまりおもしろくないからその辺で。
332:名無しさん@お腹いっぱい。
09/09/02 10:15:12
ls $dirの結果を変数sに格納するにはどうすればいいですか?
333:名無しさん@お腹いっぱい。
09/09/02 10:43:40
>>332
s=`ls $dir`
ってこと?
なんか罠がありそうな質問だ。
334:名無しさん@お腹いっぱい。
09/09/02 11:19:57
それを1個ずつとりだしたいとか、スペース・タブが入ってるとか…
335:名無しさん@お腹いっぱい。
09/09/02 13:49:18
後のこと考えるなら、-1オプション付けといたほうが無難かもね。
336:名無しさん@お腹いっぱい。
09/09/02 14:17:12
>>335
つ、釣りだよな?
337:名無しさん@お腹いっぱい。
09/09/02 14:19:12
俺も初心者なんだけど、
ls -1 . | while read s
do
done
てことでしょ?何で釣り?
338:名無しさん@お腹いっぱい。
09/09/02 14:21:08
>>337
ls -1
ls | cat
s=`ls`
echo "$s"
違いを述べよ。
よって、釣りじゃなければ「無知」。
339:名無しさん@お腹いっぱい。
09/09/02 14:24:32
>>337
ls | while ...
みたいに、lsの出力がパイプとかリダイレクト(端末以外)の場合は、
-1 オプションを付けなくてもデフォルトで勝手に -1が付くんだよ。
s=`ls $dir` の場合でも同じ。
「-1付けろ」なんて言ってる >>335 はアフォ。
340:337
09/09/02 14:53:59
なるほど・・・勉強になった!
341:名無しさん@お腹いっぱい。
09/09/02 16:44:41
「付く」わけではない。
342:名無しさん@お腹いっぱい。
09/09/02 16:45:59
けっきょく>>332は納得したの?
343:名無しさん@お腹いっぱい。
09/09/02 16:51:58
>>341
「勝手に -1の効果が付く」と言って欲しいのかよww
344:332
09/09/02 16:52:09
返事が遅くなって申し訳ありません。
>>333さんのレスが欲しかった答えでした。
345:名無しさん@お腹いっぱい。
09/09/02 16:55:27
>>343
うん。
346:名無しさん@お腹いっぱい。
09/09/03 17:03:44
質問させて下さい。
#!/bin/bash
echo $"文字列$hensu"
のような記述がありました。
$"~"という表現を初めて見たのですが、
クォートの左の$は何の役割ですか?
347:名無しさん@お腹いっぱい。
09/09/03 17:15:00
bash依存だから、覚えない方がよろしい
348:名無しさん@お腹いっぱい。
09/09/03 17:51:38
>>346
bash$ echo $"FAILED"
FAILED
bash$ TEXTDOMAIN=initscripts
bash$ echo $"FAILED"
失敗
349:346
09/09/03 20:06:49
>>348
ああ、*.poだか*.moだかですか。
ありがとうございます。
350:335
09/09/04 09:29:19
>>338
>>339
やっべオレ超アフォ!!
感動した!!!!!
ヒャッハ!!!ヽ(゚∀゚)ノ
351:名無しさん@お腹いっぱい。
09/09/06 21:01:39
シェルスクリプト初心者です。
全てのファイル名の最後の余計な部分を一括して取り除くにはどうしたらいいんでしょうか?
$ ls
hoge.hog;piyo fuga.fug;piyo foo.fo;piyo bar.ba;piyo
この ;piyo を取り除きたいんです。
とっさに
for hoge in *\;piyo; do mv $hoge
まで打ち込みましたが、これ以上解りません…
どなたか教えていただけないでしょうか
352:名無しさん@お腹いっぱい。
09/09/06 21:09:31
>>351
for hoge in *';piyo'; do mv "$hoge" `basename "$hoge" ';piyo'`; done
353:名無しさん@お腹いっぱい。
09/09/06 21:21:55
できました ありがとうございます。
文字列の操作 少し勉強します…
354:名無しさん@お腹いっぱい。
09/09/06 21:31:32
どうせbashだろうから、
↓の方が簡単だろうけどな。
for hoge in *';piyo'; do mv "$hoge" "${hoge%;piyo}"; done
355:名無しさん@お腹いっぱい。
09/09/06 21:49:34
posixをbashと言っちゃう恥知らず。
356:名無しさん@お腹いっぱい。
09/09/06 21:57:33
posix(笑)
357:名無しさん@お腹いっぱい。
09/09/07 14:34:09
なんでposixをbashと言ってると思ったんだろう。
358:名無しさん@お腹いっぱい。
09/09/09 12:51:42
Joshua Price氏がMake Tech Easierにおいて8 Useful and Interesting Bash Promptsのタイトルのもと、
bashシェルにおけるさまざまなコマンドプロンプトの設定例を紹介している。使いやすいコマンドプロンプトは
コマンドラインの使い方を変えると説明があり、同氏が調査した中でも、特によく使われていたり、
おもしろいプロンプトとその設定例が紹介されている。紹介されているプロンプトは次のとおり。
1.間違ったコマンドを入力すると顔が変わるプロンプト
URLリンク(journal.mycom.co.jp)
2.間違ったコマンドを入力すると色が変わるプロンプト
URLリンク(journal.mycom.co.jp)
3.複数行プロンプト
URLリンク(journal.mycom.co.jp)
4.データごとに色を変えて見やすくしたプロンプト
URLリンク(journal.mycom.co.jp)
5.フルパスを表示する複数行プロンプト
URLリンク(journal.mycom.co.jp)
設定方法はソース先で
URLリンク(journal.mycom.co.jp)
359:名無しさん@お腹いっぱい。
09/09/09 12:55:34
>>358
>>5
このスレはシェルスクリプトについてのスレです。
シェルの対話的な利用についての話やスクリプトと関係ないコマンドの
使い方の質問などはスレ違いなので無用に願います。
360:名無しさん@お腹いっぱい。
09/09/09 13:01:46
1レスくらいどうってことないだろ。
器量が狭いな
361:名無しさん@お腹いっぱい。
09/09/09 13:07:57
つまんねー記事貼りつけるな。しかもbash専用。
362:名無しさん@お腹いっぱい。
09/09/09 13:13:32
俺はbashですが何か?
363:名無しさん@お腹いっぱい。
09/09/09 13:22:57
>>360
「器量」の意味を間違えて使っています。
364:名無しさん@お腹いっぱい。
09/09/09 14:06:48
どういう意味?
365:名無しさん@お腹いっぱい。
09/09/09 14:11:03
>>363
どういう意味?
366:名無しさん@お腹いっぱい。
09/09/09 21:26:43
器量は良かったり悪かったりするもので狭かったり広かったりするのは心とか懐だろ。ちなみに大きかったり小さかったりするのは度量だ。
367:名無しさん@お腹いっぱい。
09/09/09 21:36:14
語源は「器の量」なのだから、大きいでも間違いではあるまい。
368:名無しさん@お腹いっぱい。
09/09/09 21:38:25
そういうことじゃなくて、
「器量が良い」=「顔が良い」(美人) という意味。
「狭い」じゃ意味をなさない。
369:名無しさん@お腹いっぱい。
09/09/09 21:46:36
女の器量はすなわち女性器なので狭いで正解。
370:名無しさん@お腹いっぱい。
09/09/09 21:51:06
日本語スクリプト総合 その2
スレリンク(unix板)
371:名無しさん@お腹いっぱい。
09/09/10 23:56:22
き‐りょう【器量】 ‥リヤウ
(「器」は材の在る所、「量」は徳のみつる所の意)
(1)その地位・役目にふさわしい才能・人柄。保元物語「合戦の場には兄弟といふ差別候ふまじ。ただ―により候」。「人の上に立つ―がある」「―を上げる」
(2)才能・力量のすぐれていること。ものの上手。平家物語(4)「笛の御―たるによつてこの宮御相伝ありけり」
(3)(「縹緻」とも書く)顔だち。みめ。また、容姿のすぐれていること。狂、猿座頭「そなたの様な好い―で」。「十人並みの―」
372:名無しさん@お腹いっぱい。
09/09/11 00:48:22
>>368
それも意味の一つってだけだぞ
それしか知らずにそれだけだと思い込んで更に他人に意見するお前は馬鹿
器量
人の器の量だ。大きい小さい狭い広いであってるんだよ。
才能や心の広さ
度量というのは心意気を指して使う。
これは大きい小さいと使う
いわゆる男気のように心の大きさ
例えば人を許すという時に慈悲深い気持ちと我慢強さからくる二通りがある。
前者は器量、後者は度量。
373:名無しさん@お腹いっぱい。
09/09/11 01:34:53
>>366,368は完璧なゆとり
ゆとり怖ぇ
374:名無しさん@お腹いっぱい。
09/09/11 01:59:31
勉強になりますお
スレ違いの
375:名無しさん@お腹いっぱい。
09/09/11 02:16:36
無駄な改行うざ
ひょっとしてスクロールしなきゃ見えないとでも?
お前の頭、いつから時代が止まってんだ
376:名無しさん@お腹いっぱい。
09/09/11 02:21:41
黙ってろ。禿げ。
377:名無しさん@お腹いっぱい。
09/09/11 06:39:03
>>371
「古語辞典」使って誤魔化すんじゃねーよ。
(現代の)「国語辞典」でちゃんと意味調べてから出直せ。
あと、どちらにしても「?が狭い」なんて用法はないから。
378:名無しさん@お腹いっぱい。
09/09/11 09:02:14
旧カナ遣いは「古語」ではない。知らない奴は黙ってろ。
379:名無しさん@お腹いっぱい。
09/09/11 09:39:41
板名とスレタイトルを確認してください。
380:名無しさん@お腹いっぱい。
09/09/11 09:41:06
>>378
平家物語や保元物語は何時代に書かれたんだよww
知らないなら黙ってろ。
381:名無しさん@お腹いっぱい。
09/09/11 09:58:01
>>372
>器量
>人の器の量だ。大きい小さい狭い広いであってるんだよ。
>才能や心の広さ
ミスリードしてるね。
「才能」の意味はあるが、「心の広さ」の意味はない。
「器量を上げる(下げる)」=「才能、能力を上げる(下げる)」
といういい方は正しいが、
「器量が狭い(広い)」といういい方は間違い。
おそらく「器(うつわ)が小さい」(←これは正しい)の、
「器(うつわ)」と「器量」を混同して間違えて覚えているのだろう。
382:名無しさん@お腹いっぱい。
09/09/11 10:16:41
平家物語が引用されている辞書が全部「古語辞典」かよ。
馬鹿は黙ってろ。
383:名無しさん@お腹いっぱい。
09/09/11 10:23:39
>>382
少なくとも(>>378)が、「古語ではない」ただの「旧カナ遣い」だ、
って言ってるのは間違いだろ。
384:名無しさん@お腹いっぱい。
09/09/11 10:32:58
>>383
広辞苑が古語辞典かよ。どんだけ未来から来たんだ。引っ込んでろ禿げ。
385:名無しさん@お腹いっぱい。
09/09/11 10:46:16
斬新なキャラ語尾だな
386:名無しさん@お腹いっぱい。
09/09/11 10:51:06
>>384
広辞苑の話の前に、
「合戦の場には兄弟といふ差別候ふまじ。」
という文章が、
(1)古語
(2)古語ではないただの旧カナ遣い
のどちらなのか決着を付けようぜ。
387:名無しさん@お腹いっぱい。
09/09/11 11:48:25
>>386
そんな事誰も言っていない。
諦めて「>>377は間違いでした。ごめんなさい」って謝れよ。
388:名無しさん@お腹いっぱい。
09/09/11 11:53:59
>>381 でFAだな。
「器量が狭い」(>>360)は間違い。
あとから出てきて議論してる人は「器量」の他の意味を挙げてるけど、
どれも「狭い」につながる意味はない。
389:名無しさん@お腹いっぱい。
09/09/11 12:04:38
URLリンク(dic.yahoo.co.jp)
これでも更に言い訳続けるか? >>377が間違いである事も謝罪しろ。
390:名無しさん@お腹いっぱい。
09/09/11 12:22:13
>>378 の謝罪は?
> 旧カナ遣いは「古語」ではない。
391:名無しさん@お腹いっぱい。
09/09/11 12:40:37
論点を整理すると、
「器量」に「心の広さ」「包容力」という意味があるかどうかってことだろ。
広辞苑(>>371) にも「包容力」という意味は載ってなかったわけだし、
>>371 は自殺点を入れたな。
まあ、>>371 は「器量には顔の良さ以外の意味もある」ということを
言いたかったんだろうけど、それを主張しても、
「器量が狭い」(>>360)を正当化することにはならない。
392:名無しさん@お腹いっぱい。
09/09/11 14:19:40
Results 1 - 10 of about 44,900 Japanese pages for 器量が狭い. (0.14 seconds)
Results 1 - 10 of about 71,300 Japanese pages for 器量が小さい. (0.09 seconds)
Results 1 - 10 of about 42,600 Japanese pages for 器量が広い. (0.14 seconds)
Results 1 - 10 of about 76,900 Japanese pages for 器量が大きい. (0.28 seconds)
393:名無しさん@お腹いっぱい。
09/09/11 14:23:00
>>391
URLリンク(thesaurus.weblio.jp)
394:名無しさん@お腹いっぱい。
09/09/11 18:34:03
おまえら器量がないな
395:名無しさん@お腹いっぱい。
09/09/11 18:54:08
>>390
正しいだろ。馬鹿。
396:名無しさん@お腹いっぱい。
09/09/11 18:56:41
ヲタクは100%の確率で度量が小さい
リアルでは常にビクビクしてる鼠みたいなやつ
397:名無しさん@お腹いっぱい。
09/09/11 19:05:21
httpdが生きてるか否かを監視するスクリプトどなたか作ってください。
GETして200が返ればOK
返らなきゃfoo@example.comにメールを投げる
みたいな簡単なのでいいです。
398:名無しさん@お腹いっぱい。
09/09/11 19:27:06
>>371は>>368の
> 「器量が良い」=「顔が良い」(美人) という意味。
に対する反証だろ。無様な言い逃れまだ続ける気?
399:名無しさん@お腹いっぱい。
09/09/11 19:32:11
>>397
ここはそういうスレじゃない
400:名無しさん@お腹いっぱい。
09/09/11 19:35:50
>>398
ということは、やっぱり、
「器量が狭い」(>>360)は間違い、
ということじゃん。
401:名無しさん@お腹いっぱい。
09/09/11 19:41:07
どうでもいい、だまれ
402:名無しさん@お腹いっぱい。
09/09/11 19:52:52
>>400
かわいそうなくらい頭悪いな。お前もう死んだ方が良い。
403:名無しさん@お腹いっぱい。
09/09/11 21:14:33
>>363
スレに関係無いところ突っ込んで、無知を晒す事になった感想は?
止めときゃよかったと思ってる? 死にたくならない?
404:名無しさん@お腹いっぱい。
09/09/11 21:38:15
狭量なやつらでいっぱいのスレ
405:名無しさん@お腹いっぱい。
09/09/11 21:53:56
>>403
おいおい、間違ってるのはお前だってw
406:名無しさん@お腹いっぱい。
09/09/11 21:57:58
>>360 間違い
>>366 正解
>>368 正解
>>372 間違い
>>381 正解
あとは煽り
407:名無しさん@お腹いっぱい。
09/09/11 21:59:34
>>389で大辞泉に
> しょう懼じょうふ【小丈夫】
> 2 器量の狭い人物。小人物。
という用例を例示されてるのに、まだ醜態晒し続けるの? 死にたくならない?
408:名無しさん@お腹いっぱい。
09/09/11 22:05:35
>>403
アンカー間違えてるよ。
>>360 に言ってくれ。
409:名無しさん@お腹いっぱい。
09/09/11 22:10:27
>>395
流れ良め。
>>378 は>>371 に書かれている文章が
「旧カナ遣いだけど古語ではない」って言ってるんだよ。
間違いだろ。馬鹿。
410:名無しさん@お腹いっぱい。
09/09/11 22:24:41
>>409
>>395 = >>378だ。
俺は
> 旧カナ遣いは「古語」ではない。
と言った。改変するな。クズ。
411:名無しさん@お腹いっぱい。
09/09/11 22:28:28
>>378 は、
>>377 が >>371 を見て、「古語」と言ったのを受けて
>>378 で 旧カナ遣いは「古語」ではない、と言った。
一般論としてではなくて、
>>371 の文章が旧カナ遣いであって古語ではない、と言った。
明らかに間違い。
412:名無しさん@お腹いっぱい。
09/09/11 22:31:40
>>408
>>360はスレ違いはともかく、用法は間違っていないな。
>>363って、恥かいて悦ぶ趣味?
413:名無しさん@お腹いっぱい。
09/09/11 22:37:18
「才能が狭い」
「技量が狭い」
「面目が狭い」
どれもおかしい。
よって「器量が狭い」は誤用。
414:名無しさん@お腹いっぱい。
09/09/11 23:01:12
>>411
また捏造かよ。恥知らず。
>>371 の「リヤウ」を指して「旧カナ遣いは『古語』ではない」と言ったんだよ。わかるか? 馬鹿。
広辞苑を「古語辞典」といった本当の理由は>>377の馬鹿じゃないと分らないが、
「リヤウ」をみて古語辞典と誤解したと思ったんだよ。
他に広辞苑を「古語辞典」という理由がお前は思い当たるのか?
>>377はもう出てこないだろうから真相は藪の中だが。
逃亡するくらいならしゃしゃりでてこなきゃ良いのに。馬鹿を自覚しつーの。
415:名無しさん@お腹いっぱい。
09/09/11 23:05:53
>>414
>「リヤウ」をみて古語辞典と誤解したと思ったんだよ。
ハハハ、そんなところ見てないよ。
古語と言ったのは用例の平家物語とかのところだよ。
結局古語でしか用例を示せてない辞書だから古語辞典だと思ったのだろう。
416:名無しさん@お腹いっぱい。
09/09/11 23:11:17
古語が載ってれば「古語辞典」と思うような馬鹿が存在するとは想定の範囲外だ。
>>377 お前は馬鹿過ぎ。出入り禁止。二度と発言すんな。
417:名無しさん@お腹いっぱい。
09/09/12 08:05:08
>>413
>>372,393
418:名無しさん@お腹いっぱい。
09/09/12 09:08:07
辞書に載ってるのは、
「顔立ち」「才能、技量」「面目」の3点なのに、
>>372 が「才能」の意味に「心の広さ」を勝手に追加してる件に付いて。
419:名無しさん@お腹いっぱい。
09/09/12 09:10:41
=================器量の話は終了=================
=================器量の話は終了=================
=================器量の話は終了=================
=================器量の話は終了=================
=================器量の話は終了=================
=================器量の話は終了=================