Bashでプログラミング [転載禁止]©2ch.net
Bash - GNU Project - Free Software Foundation
https://www.gnu.org/software/bash/ bashはUnixシェルです。
bashを使ったシェルスクリプティングテクニックや
プログラミングについて和気あいあいとそしてほのぼのと語り合いたいと
思ってこのスレを建てました。よろしくお願いいたします。 シェルスクリプトクソめんどくせぇ。
どこでも動くように作る必要があるものだから
仕方なく作ってるけど、パスにスペースが入ったらとか、
くそめんどくせぇ もうスクリプトはpythonでよくね?
Bashが動くような環境ならpythonがほぼ間違いなく動くから、制限だらけのBashで書く理由が思いつかない。 >>3
ピラフも昔はシェル間の互換性とかに気を配ってたよね。
でもある日悟ったんだよね、超めんどくせえと。
それ以来bashで動けばなんでも良いって思うようになった。
パスにスペースが入ることにも目をつぶるようになった。めでたしめでたし。 >>4
pythonいいよねpython。
一貫性があってシンプルでわかりやすい。
黒魔術perlとは違うよね。
コマンドを実行するだけとか、他のプログラムをキックするだけとか
そういうのだったらシェルスクリプトでいいんだけど、構造化が
必要なほどのプログラムになるときつい。 ノウハウが好きな人にはbashはたまらないと思うんだよね
垂涎ものだよ、たとえバッドでも。バッドでも! パスにスペースが入ってるとパスが引数として解釈されたり、
最悪の場合、脆弱性につながりそうで怖いんだが。 >>7
> たとえバッドでも。バッドでも!
[ コマンドの存在が、一番のバッドだけどなw >>8
わかる。-とかもだよね。これオプションじゃないのよー!みたいな。
シェルを広く公開するならそういうのにも対応しといたがいいのだろうけど、
内輪で使うならまあないっしょ大丈夫っしょ問題ないっしょ!と念じて目をつぶって地蔵の
ふりをするのもありだと思うよ。 >>9
マジで!?ピラフそのコマンド使ったことない。ちょっと調べてみる。 [はtestコマンドだったのか。てっきりbashのsyntaxだとばかり思ってた。 [ "$var" = "test" ]
意味
コマンド名 ・・・ [
第一引数 ・・・ "$var"
第二引数 ・・・ =
第三引数 ・・・ "test"
第四引数 ・・・ ]
考えてみよう!
[ "$var" = "test"] なぜ "test" と ] の間のスペースをなくすとエラーになるのか?
[ $var = "test" ] なぜ 変数名を "" で括るのが一般的なのか? なぜ他の言語のように
if [$var="test] then
fi
とシンプルにかけないのか?
[ コマンドを考えついた奴は、俺頭いい!って思っちゃったんだろうな。
そのせいでシェルスクリプトの構文を改善する機会がなくなった。
シェルスクリプトは変数への代入はできるが変数の参照はできない。
できるのは変数の中身の文字列展開だけ。
それがパスにスペースが有る場合の問題にまで影響してるのさ。
くっそ言語、くっそ言語、 >>18
このスレに書き込まずにはいられなかったんなら
お前も参加しろよw >>18
みんなでここをいいドヤ顔スレにしよう(提案(前向き(全力(社畜 どうしてピラフはわざわざ、プログラム板から、
Linux板にまで出てきたのですか?
皆で、オブジェクト指向のPowerShellへ、移行しませう。
他には、VBScript, JScript もあるし
.NETの世界は、極楽ですぜw >>22
糞じゃない、ピラフだ。
UnixってFreeBSDとかそういうのじゃないの?
ピラフLinux使ってるの。だからスレ建てたの。許して。 >>21
VBScriptはピラフが一番好きなプログラム言語だよ。
いいよねーあれ。Linuxでも使えたら良いのにって毎日思ってるよ。
Linux環境で動く.NET Coreが発表されて.NETはますます勢いを増しそうだよね。
PowerShellと.NET Coreはピラフも興味を持っています。今後ともよろしくお願いいたします。 ピラフさあ、困ってることがあって
標準出力と標準エラー出力を同じファイルに書き出して、
かつ、標準エラー出力のみを画面に出力したいんだよね。
そのやり方がどうしてもわからなくて教えて欲しいんです。
教えてください、おねがいします。 SNSじゃねぇんだから、>>22のスレに移動しろよ。 >>26
>>22はUnix板だよ。
アメリカの議会で税金を話し合ってるときに
中国の税金はどうとか言うのは場違いだよね。
ピラフはUnix使ってないし。ここがSNSじゃないとも思ってないし。
>>22には移動しないし。 >>28
お前が誰だ。なんだペンギンて。なめてんのか。 vipq2が高ければこのスレ落とすんだけどなぁ
無念 >>30
どうしてそんな酷いことするの?
ピラフのこと嫌いなの? >>25
tee を使えば、画面とファイルに、同時に出力できる teeコマンドとはpeeという単語をもじって作られた単語
peeとはおしっこ(をする)という意味で
(ファイルに書きだしたものが画面に)漏れる
という所から来ている。 >>3
"C:\Program Files" とかくくるだけやん
>>17
変数の参照ってどういう意味だ?
>>24
VBSやPowerShellは1GBくらいの巨大なテキストのログを
調べようとしたら、1GBのオブジェクト作ってメモリ関係のエラーが出て
ワロタよ
Unixの小さいメモリで動くコマンドをパイプでつなげる方がいいわ
DOS・NTコマンドもUnix思想だから、PowerShellやVBSをあきらめて
NTコマンドをパイプでつないでなんとか解決したけどさ。
いちいちオブジェクト作るとか大げさだわ >>33
やろうとしたいことちゃんと読んだ?
( echo 1; echo 2>&2; echo 3>1; echo 4>&2)
みたいなコマンドから
1
2
3
4
の出力と
1
3
の出力を分離したいって意味だと思ったんだが >>36
cronで頑張るわけでも無いだろうし、管理出来ていないものを無理くりやって保守できなくなる未来しか見えない。筋が悪いのでアホでも管理できるよう、KISSがいいね。 >>39
____
/ \
/ ─ ─\
/ ⌒ ⌒ \ ハハッ超ワロス 笑い死ぬわ
| ,ノ(、_, )ヽ |
\ トェェェイ /
/ _ ヽニソ, く >>33
teeって標準出力を受け取るじゃん。
標準エラー出力のみを画面に出力するとともに
標準出力と標準エラー出力を同じファイルに出力したい。
とても難しい。とてもわからない。とても教えてほしい。
>>36
そうなんよ。わからないんよ。教えてほしいんよ。お願いするんよ。 >>35
んなアホな。VBScriptはできる子だよ。ピラフが証明してみせるよ。 % 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
stdout と stderr との同期とれてないのが、、うーん 標準出力はバッファリングされて、
ある程度データがたまってから出力されるが、
標準エラーは重要度が高いため、
バッファリングされずに、即画面に出力される
>>3
ファイル名には、半角英数字と「_」アンダーバーだけを、
使った方がよい。外人の作るアプリでは、
日本語などは考慮されていないことが多いから
Mac用に、PowerShellでファイル名の、
半角スペースをアンダーバーに変換する、
プログラムを書いたりした >>46
> 外人の作るアプリでは、
> 日本語などは考慮されていないことが多いから
えっとな、俺日本人。
今は俺(=日本人)が作るアプリの話してる。 それからスペースは日本語じゃない。
半角英数字と「_」アンダーバーだけを使った方がよい理由が、
日本語を考慮してないからというのは、理屈がおかしい >>43
簡単なものは簡単なままにしておけクソ野郎 UNIX シェルスクリプト・コマンドブック 第3版
山下哲典、2015
Software Design 2014/1
にも、シェルの特集が40ページ分、載っている
まあ、1〜2週間あれば、そこそこ出来る
ただ、exportを付けないシェル変数は、
同一プロセス内でのみ有効で、
下記のサブシェルのような、別のプロセスには引き継がれない
` ` または、$( ) によるコマンド置換
( ) によるグルーピング
パイプ・リダイレクト
シェル変数を、別のスクリプトでも使いたいのなら、
. または、source コマンドで、
スクリプトをカレントシェル上に呼び出すと、
同一プロセス内での実行となる
sh スクリプト名 → 別のプロセス(子プロセス)
. スクリプト名 → 同一プロセス シュエルスクリプトの関数にするか、
それとも外部プログラムにするか、
どっちがいい? >>52
動くならどっちでもいい。直感的にわかりやすい。コードの見通しが良くなる方が望ましい。 GTK+のプログラミングマスターした人いる?
紙資料で3.5cmの厚みなんだ。
為になるよ。 >>27
bashはOSに依存しないし、該当スレはbashなりzshなり使用するシェルをきちんと申告すれば対応してくれる
それ以上に理由がない限りスレを立てる意味がない >>55
UNIX板はUNIXに依存してるでしょうが。
女性専用の老人ホームに若くてピチピチの可愛いギャルが
入居するようなものだよ。女に変わりはないだろうけども
不適切だよね。老人じゃないし、可愛いし、ピチピチだし。
場を弁えるってそういうことだと思う。若い人が新たにコミュニティを作る
ことには意味があると思うし、ピラフは梯子(テコ)でも動かない! というスピリッツで単発スレ立てする人は自分が満足すると埋め立ての責任を持たず放置する傾向にあるんだよな。
ちゃんと1000まで話題を提供してくれるの?(´・ω・`) >>59
みんなでここを良いスレにしようよ。
ピラフだけでは無理。みんなで力を合わせようよ。 >>60
あのさ、>>45 に対して礼のひとつも言わないのは人としてまずくない? >>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
2
3
4
保証はせーへんけどな >>62
> あのさ、>>45 に対して礼のひとつも言わないのは人としてまずくない?
ですよね。お礼は三行。常識です。 ☆ 日本の核武装は早急に必須ですわ。☆
総務省の『憲法改正国民投票法』、でググってみてください。
日本国民の皆様方、2016年7月の『第24回 参議院選挙』で、日本人の悲願である
改憲の成就が決まります。皆様方、必ず投票に自ら足を運んでください。お願い致します。