Bashでプログラミング [転載禁止]©2ch.net (264レス)
1-

1
(2): ピラフ 2015/10/04(日)00:11 ID:KQhWWZXy(1/17) AAS
Bash - GNU Project - Free Software Foundation
外部リンク:www.gnu.org
2: ピラフ 2015/10/04(日)00:17 ID:KQhWWZXy(2/17) AAS
bashはUnixシェルです。
bashを使ったシェルスクリプティングテクニックや
プログラミングについて和気あいあいとそしてほのぼのと語り合いたいと
思ってこのスレを建てました。よろしくお願いいたします。
3
(3): 2015/10/04(日)02:17 ID:B+hGdmlE(1/7) AAS
シェルスクリプトクソめんどくせぇ。
どこでも動くように作る必要があるものだから
仕方なく作ってるけど、パスにスペースが入ったらとか、
くそめんどくせぇ
4
(1): 2015/10/04(日)03:41 ID:2ljDEtpK(1) AAS
もうスクリプトはpythonでよくね?
Bashが動くような環境ならpythonがほぼ間違いなく動くから、制限だらけのBashで書く理由が思いつかない。
5: ピラフ 2015/10/04(日)03:50 ID:KQhWWZXy(3/17) AAS
>>3
ピラフも昔はシェル間の互換性とかに気を配ってたよね。
でもある日悟ったんだよね、超めんどくせえと。
それ以来bashで動けばなんでも良いって思うようになった。
パスにスペースが入ることにも目をつぶるようになった。めでたしめでたし。
6: ピラフ 2015/10/04(日)03:54 ID:KQhWWZXy(4/17) AAS
>>4
pythonいいよねpython。
一貫性があってシンプルでわかりやすい。
黒魔術perlとは違うよね。
コマンドを実行するだけとか、他のプログラムをキックするだけとか
そういうのだったらシェルスクリプトでいいんだけど、構造化が
必要なほどのプログラムになるときつい。
7
(1): ピラフ 2015/10/04(日)03:57 ID:KQhWWZXy(5/17) AAS
ノウハウが好きな人にはbashはたまらないと思うんだよね
垂涎ものだよ、たとえバッドでも。バッドでも!
8
(1): 2015/10/04(日)04:03 ID:B+hGdmlE(2/7) AAS
パスにスペースが入ってるとパスが引数として解釈されたり、
最悪の場合、脆弱性につながりそうで怖いんだが。
9
(1): 2015/10/04(日)04:07 ID:B+hGdmlE(3/7) AAS
>>7
> たとえバッドでも。バッドでも!

[ コマンドの存在が、一番のバッドだけどなw
10: ピラフ 2015/10/04(日)04:17 ID:KQhWWZXy(6/17) AAS
>>8
わかる。-とかもだよね。これオプションじゃないのよー!みたいな。
シェルを広く公開するならそういうのにも対応しといたがいいのだろうけど、
内輪で使うならまあないっしょ大丈夫っしょ問題ないっしょ!と念じて目をつぶって地蔵の
ふりをするのもありだと思うよ。
11: ピラフ 2015/10/04(日)04:18 ID:KQhWWZXy(7/17) AAS
>>9
マジで!?ピラフそのコマンド使ったことない。ちょっと調べてみる。
12
(1): 2015/10/04(日)04:21 ID:B+hGdmlE(4/7) AAS
> そのコマンド使ったことない。

ナイスジョーク
13: ピラフ 2015/10/04(日)04:23 ID:KQhWWZXy(8/17) AAS
[はtestコマンドだったのか。てっきりbashのsyntaxだとばかり思ってた。
14: ピラフ 2015/10/04(日)04:25 ID:KQhWWZXy(9/17) AAS
>>12
?d(゚∀゚d)ォゥィェ!!
15
(1): 2015/10/04(日)04:28 ID:B+hGdmlE(5/7) AAS
[ "$var" = "test" ]

意味

コマンド名 ・・・ [
第一引数 ・・・ "$var"
第二引数 ・・・ =
第三引数 ・・・ "test"
第四引数 ・・・ ]

考えてみよう!

[ "$var" = "test"] なぜ "test" と ] の間のスペースをなくすとエラーになるのか?
[ $var = "test" ] なぜ 変数名を "" で括るのが一般的なのか?
16
(1): ピラフ 2015/10/04(日)04:34 ID:KQhWWZXy(10/17) AAS
>>15
おもしろい、考えてみる!
17
(1): 2015/10/04(日)04:44 ID:B+hGdmlE(6/7) AAS
なぜ他の言語のように

if [$var="test] then
fi

とシンプルにかけないのか?

[ コマンドを考えついた奴は、俺頭いい!って思っちゃったんだろうな。
そのせいでシェルスクリプトの構文を改善する機会がなくなった。

シェルスクリプトは変数への代入はできるが変数の参照はできない。
できるのは変数の中身の文字列展開だけ。
省2
18
(2): 2015/10/04(日)05:08 ID:Fdr2poSK(1) AAS
しょーもないことをドヤ顔で語ってるな
19: 2015/10/04(日)05:14 ID:B+hGdmlE(7/7) AAS
>>18
このスレに書き込まずにはいられなかったんなら
お前も参加しろよw
20
(1): ピラフ 2015/10/04(日)05:33 ID:KQhWWZXy(11/17) AAS
>>18
みんなでここをいいドヤ顔スレにしよう(提案(前向き(全力(社畜
21
(1): 2015/10/04(日)11:26 ID:q4z/9k1Q(1) AAS
どうしてピラフはわざわざ、プログラム板から、
Linux板にまで出てきたのですか?

皆で、オブジェクト指向のPowerShellへ、移行しませう。
他には、VBScript, JScript もあるし

.NETの世界は、極楽ですぜw
22
(3): 2015/10/04(日)12:27 ID:O5AlniCT(1) AAS
これがあるんだからスレ立てるじゃねえの糞が

シェルスクリプト総合 その25(c)2ch.net
2chスレ:unix
23: ピラフ 2015/10/04(日)13:01 ID:KQhWWZXy(12/17) AAS
>>22
糞じゃない、ピラフだ。
UnixってFreeBSDとかそういうのじゃないの?
ピラフLinux使ってるの。だからスレ建てたの。許して。
24
(1): ピラフ 2015/10/04(日)13:09 ID:KQhWWZXy(13/17) AAS
>>21
VBScriptはピラフが一番好きなプログラム言語だよ。
いいよねーあれ。Linuxでも使えたら良いのにって毎日思ってるよ。
Linux環境で動く.NET Coreが発表されて.NETはますます勢いを増しそうだよね。
PowerShellと.NET Coreはピラフも興味を持っています。今後ともよろしくお願いいたします。
25
(1): ピラフ 2015/10/04(日)20:31 ID:KQhWWZXy(14/17) AAS
ピラフさあ、困ってることがあって
標準出力と標準エラー出力を同じファイルに書き出して、
かつ、標準エラー出力のみを画面に出力したいんだよね。
そのやり方がどうしてもわからなくて教えて欲しいんです。
教えてください、おねがいします。
26
(1): 2015/10/04(日)22:30 ID:cHujBtP3(1) AAS
SNSじゃねぇんだから、>>22のスレに移動しろよ。
27
(1): ピラフ 2015/10/04(日)22:47 ID:KQhWWZXy(15/17) AAS
>>26
>>22はUnix板だよ。
アメリカの議会で税金を話し合ってるときに
中国の税金はどうとか言うのは場違いだよね。
ピラフはUnix使ってないし。ここがSNSじゃないとも思ってないし。
>>22には移動しないし。
28
(1): 2015/10/04(日)22:52 ID:mhzx8YQK(1) AAS
おのれは誰やねん
29: ピラフ 2015/10/04(日)23:11 ID:KQhWWZXy(16/17) AAS
>>28
お前が誰だ。なんだペンギンて。なめてんのか。
30
(1): 2015/10/04(日)23:31 ID:jHPuSLta(1) AAS
vipq2が高ければこのスレ落とすんだけどなぁ
無念
31: ピラフ 2015/10/04(日)23:33 ID:KQhWWZXy(17/17) AAS
>>30
どうしてそんな酷いことするの?
ピラフのこと嫌いなの?
32
(1): 2015/10/05(月)00:13 ID:krlerkMH(1/3) AAS
ピラフは旨い
33
(2): 2015/10/05(月)02:41 ID:n5ifdXzm(1) AAS
>>25
tee を使えば、画面とファイルに、同時に出力できる
34
(1): 2015/10/05(月)05:22 ID:krlerkMH(2/3) AAS
teeコマンドとはpeeという単語をもじって作られた単語

peeとはおしっこ(をする)という意味で
(ファイルに書きだしたものが画面に)漏れる
という所から来ている。
35
(1): 2015/10/05(月)11:09 ID:Msv6SUAn(1) AAS
>>3
"C:\Program Files" とかくくるだけやん

>>17
変数の参照ってどういう意味だ?

>>24
VBSやPowerShellは1GBくらいの巨大なテキストのログを
調べようとしたら、1GBのオブジェクト作ってメモリ関係のエラーが出て
ワロタよ

Unixの小さいメモリで動くコマンドをパイプでつなげる方がいいわ
DOS・NTコマンドもUnix思想だから、PowerShellやVBSをあきらめて
省2
36
(2): 2015/10/05(月)14:53 ID:DDfYGEKk(1) AAS
>>33
やろうとしたいことちゃんと読んだ?
( echo 1; echo 2>&2; echo 3>1; echo 4>&2)
みたいなコマンドから

1
2
3
4

の出力と

1
省2
37
(1): 2015/10/05(月)20:15 ID:RFzaXW3t(1) AAS
>>36
cronで頑張るわけでも無いだろうし、管理出来ていないものを無理くりやって保守できなくなる未来しか見えない。筋が悪いのでアホでも管理できるよう、KISSがいいね。
38
(1): 2015/10/05(月)20:21 ID:qJa6tBSz(1) AAS
bashを極めたいんだがなんかいいサイトないか?
39
(1): 2015/10/05(月)21:09 ID:krlerkMH(3/3) AAS
>>38
外部リンク:www.amazon.co.jp
40: ピラフ 2015/10/05(月)21:12 ID:GG5PCVx7(1/5) AAS
AA省
41: ピラフ 2015/10/05(月)21:13 ID:GG5PCVx7(2/5) AAS
>>34
変態
42: ピラフ 2015/10/05(月)21:15 ID:GG5PCVx7(3/5) AAS
>>33
teeって標準出力を受け取るじゃん。
標準エラー出力のみを画面に出力するとともに
標準出力と標準エラー出力を同じファイルに出力したい。
とても難しい。とてもわからない。とても教えてほしい。

>>36
そうなんよ。わからないんよ。教えてほしいんよ。お願いするんよ。
43
(1): ピラフ 2015/10/05(月)21:16 ID:GG5PCVx7(4/5) AAS
>>37
ヽ(○´ε`○)ノぶちゅ
44: ピラフ 2015/10/05(月)21:17 ID:GG5PCVx7(5/5) AAS
>>35
んなアホな。VBScriptはできる子だよ。ピラフが証明してみせるよ。
45
(2): 2015/10/06(火)00:31 ID:F1F9KS5h(1) AAS
% cat test.sh
( echo 1; echo 2 >&2; echo 3; echo 4 >&2 )

% : > log; stdbuf -oL -eL bash test.sh 2>>log | tee -a log
1
3

% cat log
2
1
3
4
省1
46
(1): 2015/10/06(火)04:37 ID:RPZPhUvj(1) AAS
標準出力はバッファリングされて、
ある程度データがたまってから出力されるが、

標準エラーは重要度が高いため、
バッファリングされずに、即画面に出力される

>>3
ファイル名には、半角英数字と「_」アンダーバーだけを、
使った方がよい。外人の作るアプリでは、
日本語などは考慮されていないことが多いから

Mac用に、PowerShellでファイル名の、
半角スペースをアンダーバーに変換する、
省1
47: 2015/10/06(火)04:44 ID:NURn7XIT(1/2) AAS
>>46
> 外人の作るアプリでは、
> 日本語などは考慮されていないことが多いから

えっとな、俺日本人。
今は俺(=日本人)が作るアプリの話してる。
48: 2015/10/06(火)04:47 ID:NURn7XIT(2/2) AAS
それからスペースは日本語じゃない。

半角英数字と「_」アンダーバーだけを使った方がよい理由が、
日本語を考慮してないからというのは、理屈がおかしい
49: 2015/10/06(火)12:44 ID:4T4D9m2w(1) AAS
>>43
簡単なものは簡単なままにしておけクソ野郎
50: 2015/10/06(火)12:55 ID:IpqxO3tA(1) AAS
bashは何日でマスターできる?
51
(1): 2015/10/07(水)07:32 ID:GQwM5Yjq(1) AAS
UNIX シェルスクリプト・コマンドブック 第3版
山下哲典、2015

Software Design 2014/1
にも、シェルの特集が40ページ分、載っている

まあ、1〜2週間あれば、そこそこ出来る

ただ、exportを付けないシェル変数は、
同一プロセス内でのみ有効で、
下記のサブシェルのような、別のプロセスには引き継がれない

` ` または、$( ) によるコマンド置換
( ) によるグルーピング
省7
52
(1): 2015/10/07(水)10:29 ID:M6NB5j5s(1) AAS
シュエルスクリプトの関数にするか、
それとも外部プログラムにするか、
どっちがいい?
53: 2015/10/07(水)12:55 ID:8ottO0ep(1) AAS
>>52
動くならどっちでもいい。直感的にわかりやすい。コードの見通しが良くなる方が望ましい。
54: 2015/10/07(水)19:58 ID:RV6ZvwXQ(1) AAS
GTK+のプログラミングマスターした人いる?
紙資料で3.5cmの厚みなんだ。
為になるよ。
55
(1): 2015/10/08(木)09:11 ID:WEInxm9o(1) AAS
>>27
bashはOSに依存しないし、該当スレはbashなりzshなり使用するシェルをきちんと申告すれば対応してくれる
それ以上に理由がない限りスレを立てる意味がない
56: 2015/10/08(木)20:48 ID:lgr3Fqt0(1) AAS
なぜbashなのに拡張子を.shにするのか
57: 2015/10/08(木)22:09 ID:zqGOFpq7(1) AAS
拡張子は飾りです
お好きなようにどうぞ
58: ピラフ 2015/10/08(木)22:25 ID:HskmnVPN(1/2) AAS
>>55
UNIX板はUNIXに依存してるでしょうが。
女性専用の老人ホームに若くてピチピチの可愛いギャルが
入居するようなものだよ。女に変わりはないだろうけども
不適切だよね。老人じゃないし、可愛いし、ピチピチだし。
場を弁えるってそういうことだと思う。若い人が新たにコミュニティを作る
ことには意味があると思うし、ピラフは梯子(テコ)でも動かない!
59
(2): 2015/10/08(木)23:29 ID:UuNzaExB(1) AAS
というスピリッツで単発スレ立てする人は自分が満足すると埋め立ての責任を持たず放置する傾向にあるんだよな。
ちゃんと1000まで話題を提供してくれるの?(´・ω・`)
60
(1): ピラフ 2015/10/08(木)23:40 ID:HskmnVPN(2/2) AAS
>>59
みんなでここを良いスレにしようよ。
ピラフだけでは無理。みんなで力を合わせようよ。
61: ピラフ 2015/10/09(金)02:29 ID:apuZirFb(1) AAS
全員がピラフになれば、ピラフだけでもヤれる
62
(2): 2015/10/09(金)23:04 ID:3VAz+DjZ(1) AAS
>>60
あのさ、>>45 に対して礼のひとつも言わないのは人としてまずくない?
63: ダメな奴は何をやっても©2ch.net [agete] 2015/10/14(水)05:54 ID:VsqQS5me(1) AAS
>>62
表示したいのはエラー出力やし人格否定するほどではないな

$ cat test.sh
#!/bin/sh
echo 1; echo 2 >&2; echo 3; echo 4 >&2

$ ( ./test.sh >> log ) 2>&1 | tee -a log
2
4

$ cat log
1
省4
64: 2015/10/14(水)06:28 ID:v4uCjH3b(1) AAS
>>62
> あのさ、>>45 に対して礼のひとつも言わないのは人としてまずくない?

ですよね。お礼は三行。常識です。
65
(1): 2015/10/17(土)11:28 ID:tB03pcpd(1) AAS
もう>>59が言ってる状態に入りかけてる
66: 2015/10/22(木)23:02 ID:hLzbOUmG(1) AAS
☆ 日本の核武装は早急に必須ですわ。☆
総務省の『憲法改正国民投票法』、でググってみてください。
日本国民の皆様方、2016年7月の『第24回 参議院選挙』で、日本人の悲願である
改憲の成就が決まります。皆様方、必ず投票に自ら足を運んでください。お願い致します。
67: 2015/11/05(木)02:04 ID:70mAwyHg(1) AAS
bashで30ファイル、計1500行ぐらいの
大作ツール作ったぜw
68: 2015/11/05(木)07:56 ID:y6/bEwWc(1) AAS
解説付きうpplz
69: 2015/11/07(土)02:29 ID:M5pvVJO6(1) AAS
pythonなら1桁落ちるわけですね?
70: 2015/11/07(土)09:27 ID:XsE55U3y(1) AAS
ないわーw
71: ピラフ ◆9Jro6YFwm650 2015/11/09(月)00:31 ID:uu5Sv9eW(1/2) AAS
>>65
ピラフもうネタ切れだからさ、なんか話題あったら書き込んで。
遠慮しなくていいから。みんなでここをいいスレにしようよ!
72
(1): ピラフ ◆9Jro6YFwm650 2015/11/09(月)00:39 ID:uu5Sv9eW(2/2) AAS
変数の宣言について
たとえば、こういうプログラムを書いたとき
pilafは9回表示されるかと思いきや3回しか表示されない。
fun_testでfun_mainのiを読み書きしてしまうから。
だから、変数はローカル変数で宣言する必要がある。

#!/bin/bash

fun_test() {
 i=1
 while (( i <= 3 )); do
  echo pilaf
省11
73: 2015/11/09(月)02:21 ID:vvdpTyUy(1/2) AAS
以下のコードは何も表示されない。

#!/bin/bash

echo "hello" | while read msg; do
 var=$msg
done

echo $var
74: 2015/11/09(月)03:17 ID:glvAAiJJ(1) AAS
パイプを使っているから、
その部分がサブシェル(子プロセス)になっていて、

そこで宣言した変数varが、
カレントシェル(親プロセス)に持ち出せない

どういう解決策があったっけ?
export を付ければよいのか?

>>51
に書いておいた
75: 2015/11/09(月)03:34 ID:sW5M/AJB(1) AAS
echo -ne "hello\nworld" | while read msg; do echo $msg ;done

うっかりしてると最後の行を処理し損ねる
76
(1): 2015/11/09(月)03:41 ID:vvdpTyUy(2/2) AAS
こう書き換えるだけでいいよ

while read msg; do
 var=$msg
done < <(echo "hello")
77: 76 2015/11/09(月)11:14 ID:9zOZIa4h(1) AAS
さて、ではこれはどう表示されるでしょうか?

#!/bin/bash

i=0

while read msg; do
echo "A $msg"
((i+=3))
done < <(while read msg; do
echo "B $msg"
((i+=2))
done < <(echo "hello"))
省1
78: 2015/11/10(火)09:33 ID:DpgyD2JB(1) AAS
外部リンク:pero2.cocolog-nifty.com
79: ピラフ ◆9Jro6YFwm650 2015/11/17(火)23:05 ID:cJiBRV26(1) AAS
変数の宣言と同時に値を代入を行うと
コマンド置換を使うときにリターンコードを取得できない

fun_getValue() {
 return 1
}

fun_main() {
 declare value=$(fun_getValue)
 echo $?
}

fun_main
省5
80: 2015/11/19(木)09:42 ID:Jjkt5i+K(1) AAS
間接参照はこうすればいいみたいだけどさ、

var=123
ref="var"
echo "${!ref}" # 123

間接代入はどうすればいいの?
一応evalつかってできたけど、これしかない?

eval "$ref"=456
81: 2015/11/19(木)22:36 ID:3iQoIwnP(1) AAS
だまってPHPとかC言語とか使えや。
反論不要。だまって使え。
所詮bashはシェルだよ。
プログラミング言語として使おうとしなくていい。
82: 2015/11/20(金)06:03 ID:oqxoCWjH(1) AAS
(まともな)コーディング規約ってないかな?
83
(2): 2015/11/20(金)17:45 ID:UgnIOuo6(1) AAS
[[ $a = $b ]]

$a はただの文字列として扱われるが、$b はパターンマッチング処理されることに注意

単なる文字列比較をしたい場合は
[[ $a = "$b" ]] または [[ "$a" = "$b" ]]

なお、[ ] と違って [[ ]] は $a を "" で囲む必要はない。
84: ピラフ ◆9Jro6YFwm650 2015/11/23(月)11:07 ID:e6CiHMu0(1/2) AAS
>>83
echoもそうだよね。
いい感じのエラーログを出力しようとしたらファイル丸出し。

a="*** ERROR ***"
echo $a
85
(1): 2015/11/23(月)12:24 ID:rfqyRG3i(1) AAS
echo には -e という文字列を出力できないという問題があるので
完ぺきを求めるなら、printf "%s\n" "$text" とした方がいい。

なお、echo も printf も それぞれ /bin/echo、/usr/bin/printf という
バイナリがあるが、bash も sh も zsh もシェルビルトイン関数である。
86: ピラフ ◆9Jro6YFwm650 2015/11/23(月)14:03 ID:e6CiHMu0(2/2) AAS
>>85
マジか!?マジでか!!
echo難儀なコマンドだね
87: 2015/11/23(月)17:17 ID:HMW3Nv9o(1) AAS
echo -e \\0055e
88
(1): 2015/11/23(月)17:25 ID:m+EccjTy(1) AAS
あー、うん、せやね。

-eだけじゃなくて-nもだめだし-eneもだめ
さて$aに任意の文字が入っている時、それをechoで問題なく出力するにはどうするか?

もちろん、$aに \e[33m のような文字列が入っていることがあるが、
printf "%s\n" $a と同じようにそのまま出力するというのが条件。

とまで書かないといかんよね。
89: 2015/11/24(火)10:07 ID:xf2Nfg3B(1/5) AAS
bashでは知らないけどzshでは
echo e- |rev
とすると表示できたよ。
90: 2015/11/24(火)14:55 ID:jlJmLfSH(1/4) AAS
a="-e"
echo "$a" |rev

zshでも表示されねーじゃねーかwww
91
(1): 2015/11/24(火)15:25 ID:xf2Nfg3B(2/5) AAS
echo $'\0'$a
92: 2015/11/24(火)15:35 ID:xf2Nfg3B(3/5) AAS
いや、その条件ならa='e-'にしてrevするべきだろ。
93: 2015/11/24(火)15:38 ID:jlJmLfSH(2/4) AAS
条件は $a に -e が入っている場合なんですが?

もちろん $a には-e だけじゃなくて、-n や -ene や
e-が入っていることもあります。
94: 2015/11/24(火)15:44 ID:jlJmLfSH(3/4) AAS
>>91

a="ab"

$ echo -n $a | wc -c
2

$ echo -n $'\0'$a | wc -c
3

1文字増えちゃってますよ?
95: 2015/11/24(火)15:46 ID:xf2Nfg3B(4/5) AAS
そんな偉そうに言われてもな。89にたいする90の解答って..
96: 2015/11/24(火)15:46 ID:xf2Nfg3B(5/5) AAS
そりゃ増えるよ。見たまんま増やしてるのだから。
97: 2015/11/24(火)16:11 ID:jlJmLfSH(4/4) AAS
? ネタ回答はいらんって話だよ。
98
(1): 2015/11/24(火)23:41 ID:zPMHS13p(1) AAS
Bashでツールを作ったんですけど、ここで紹介するのありですか?
ソースコードはかなりまじめに書いています。
ドキュメントと仕上げでもう少しだけ時間が掛かりそうですけど。
99
(1): ピラフ ◆9Jro6YFwm650 2015/11/24(火)23:51 ID:uXBTKSJE(1) AAS
AA省
100: 2015/11/25(水)00:23 ID:ndEs85Cz(1) AAS
つ 穴を塞ぐ
1-
あと 164 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.018s