1 名前:名無しさん@お腹いっぱい。 mailto:sageteoff [2015/08/14(金) 23:42:01.51 .net] シェルスクリプトの総合スレです。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。 src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/ heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) ・シェルスクリプトのことをシェルってゆーな □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも awkまたはperlの方が適した処理にはそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 □回答者への注意事項: ・シェルスクリプトでの処理方法を質問しているのに、よくわからずに 「そういうのはperl使いましょう」と回答するのはやめましょう。 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。 前スレ シェルスクリプト総合 その24 peace.2ch.net/test/read.cgi/unix/1415634843/
460 名前:名無しさん@お腹いっぱい。 [2016/02/06(土) 18:54:27.39 .net] >>449 スクリプトの種類を名乗る
461 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/06(土) 19:55:26.03 .net] 本物と同じ名前の機能の違うコマンドを検索で優先されるディレクトリに置いちゃってドヤ顔する バッドノウハウ使いの老害は早く死んで欲しい
462 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/06(土) 20:35:47.85 .net] 大丈夫、そんな人はいない
463 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/06(土) 21:23:44.47 .net] /bin じゃなくて /usr/bin なのか?という話だろ
464 名前:名無しさん@お腹いっぱい。 [2016/02/07(日) 04:25:51.93 .net] >>454 /usr/binと/binは基本的に一緒だが、環境によっては違うんじゃないの?
465 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/07(日) 12:45:47.23 .net] /usrを別パーティションにしてた頃の名残だよね
466 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/07(日) 18:02:30.90 .net] /sbinまでは認めてやっても良い
467 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/07(日) 19:26:38.34 .net] Linuxディストリの一部やSolarisではすべて/usrに移動してる(usr mergeまたはusr moveと呼ぶ) /binと/sbinはシンボリックリンクで残ってる
468 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 08:20:49.74 .net] いっそ、bashをオブジェクト指向に進化させれば、 pythonなぞいらなくなる
469 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 10:14:57.97 .net] 全角だとバカにしか見えないのは何故だ?
470 名前:名無しさん@お腹いっぱい。 [2016/02/08(月) 10:31:10.92 .net] >>460 おっさんの可能性もある。
471 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 10:49:58.88 .net] 新聞社の方でしょう
472 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 12:25:26.78 .net] 綺麗な見た目に気を遣って作られたプロポーショナルフォントだと全く気にならない 幅が広けりゃいいんでしょ的なやっつけフォントや固定幅フォントを使って表示してると バランスが悪いのでそうなる
473 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 12:34:34.64 .net] >>460 裸の王様だからかな
474 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 13:02:09.16 .net] shebang 行は、種類を名乗るといえば名乗っているけれど、 実際には、実行するコマンドラインを指定するもの 以下、補足 例えばこのスクリプトで試すと $ cat ~/src/test/script #!../bin/echo "hoge" 'fuga' $ pwd /usr $ ~/src/test/script 'arg 1' "arg 2" "hoge" /home/anonymous/src/test/script arg 1 arg 2 上では、結果的に 相対パス/echo "hoge" 引数0 引数1 引数2 が実行された結果が印字されている 普通に #!/bin/sh なスクリプトだと、結果的に実行されるのは次 /bin/sh path/to/スクリプト名 引数1 引数2 ...
475 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 13:23:29.92 .net] >>465 shebangが種類を名乗るって何のこと? そのスクリプトを処理するインタプリタを(引数込みで)指定する 以外の説明みたことないけど
476 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 15:38:21.12 .net] >>466 >>449 !/usr/bin/shと書いてシェルスクリプトを名乗るのか。 >>451 スクリプトの種類を名乗る >>465 shebang 行は、種類を名乗るといえば名乗っているけれど、
477 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 17:11:40.36 .net] オプションも渡せるよ。 #!/usr/bin/bash -x とかね。
478 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 20:55:16.08 .net] >>468 それなら俺もお前も大体の奴が知ってる。
479 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 23:06:27.57 .net] 一個だけしか渡せないのは意外と知られていない
480 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 00:18:04.86 .net] 変数に含まれる記号で質問です。 curlで、サーバに置いてあるファイルを削除したいのですが、 curl -Q "DELE a.txt" host.sample.com curl -Q 'DELE a.txt' host.sample.com これだと動きました。 スクリプトで回したいときなどで変数に格納した場合で、 string="-Q 'DELE a.txt'" curl ${string} host.sample.com これだと、-Q以降の「 ”〜〜〜” 」で囲われた引数が伝わらないようで、動きませんでした。 > DELE < 501 Invalid number of arguments と返答がありました。 「"」そのものや「'」を変数で伝えるのは、一般的にどのように記述すればよいでしょうか。 記号で検索しても、なかなか情報が出ず、ヒントをお願いできればと思います。
481 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 02:34:23.06 .net] >>471 curl "-Q 'DELE a.txt'" host.sample.com ってことじゃん。 コマンドオブションが引数扱いってわけですね。
482 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 06:18:16.59 .net] string="-Q 'DELE a.txt'" eval curl ${string} host.sample.com あるいは set x -Q 'DELE a.txt' shift curl "$@" host.sample.com
483 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 06:31:19.45 .net] 書いている内に、別の解答が...しかも set x; shift の方が良い とりあえず貼っておく eval を使う 展開されたくない所は、何も考えずにシングルクォートしておく $ set -vx #とりあえずデバッグ用に $ opt471="-Q 'DELE a.txt'" $ sh -c 'for arg; do echo "$arg"; done' parseArgs ${opt471} #質問時の状態 $ eval 'sh -c '\''for arg; do echo "$arg"; done'\'' parseArgs '${opt471} set も使う $ eval set -- ${opt471} $ sh -c 'for arg; do echo "$arg"; done' parseArgs "$@" bash の配列を使っても良い $ opt471=(-Q 'DELE a.txt') $ bash -c 'for arg; do echo "$arg"; done' parseArgs "${opt471[@]}"
484 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 12:13:30.71 .net] とりあえず set -- も POSIX なんだけど autoconf では set x ...; shift をすすめている 少し訂正 eval の際のクォートが抜けていた。連続した空白等で違いが出る sh -c だと見難いので、function で書きなおした $ parseArgs () { i=0; for arg; do echo "arg[$((i+=1))]: $arg"; done; } $ opt471="-Q 'DELE (spaces) a.txt'" $ eval parseArgs "${opt471}" $ eval set -- "${opt471}" $ parseArgs "$@" ついでにIFS を使うもの $ LF=' ' $ opt471=' -Q DELE a.txt ' $ IFS=$LF; parseArgs $opt471 'another option' 'more...'
485 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 17:36:27.79 .net] >>471 です。 >>472-475 たくさんの方法を、ありがとうございます! のちほど実験してみます。
486 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 19:11:23.15 .net] スクリプトの外部からやって来た文字列をエバると危険
487 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 20:55:40.83 .net] 個人的には、host.sample.comにコマンドを渡す curl -Q "$*" host.sample.com を関数かスクリプトにするかなぁ 単独でも使えそうだし
488 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 23:45:01.02 .net] ごちゃごちゃ書いてしまったので、まとめてみる 結局の所 変数からクォートを考慮して単語分割するには、eval を使う 配列(もどき)に入れるには set か val=(...) もしくは改行区切り等 eval 無しだと、sed perl ruby 辺りで自力で単語分割 簡単なものなら xargs も使えるか
489 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/11(木) 07:29:09.80 .net] 午前1時に cu -l /dev/ugen0.2 > 160211.log のコマンドを開始し、 23時間後の午前0時に停止する、というシェルスクリプトを作りたいと思っています。 ログファイルの名前は午前1時の時点の日付が入ります。 ここで質問なのですが、 指定した時刻でコマンド(cu)の起動、停止をするにはどうすれば良いのでしょうか? OS:FreeBSD10.2-RELEASE シェル:sh です。
490 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/11(木) 09:25:45.48 .net] >>480 cronやat
491 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/11(木) 13:08:07.53 .net] >>481 ありがとうございます!! これで幸せになれます!!
492 名前:480 mailto:sage [2016/02/12(金) 08:51:56.08 .net] シェルスクリプトでcuのプロセスをkillしようとしたがうまくいかなんだ・・・。 結局、 ・起動はcron ・cuからminicomに変更 ・minicomのソフト改造 ・ログファイルを設定なしで保存するように改造 ・時間を見て終了するように改造 ・タイムスタンプを設定なしでつけるように改造 で落ち着きそう。 うーんせっかくの有休だが、午前中はFreeBSDになりそうだ。
493 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/12(金) 09:40:24.87 .net] 意味がわかんないけど普通にコマンドラインからkillしてもkillできないの?
494 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/12(金) 09:42:07.41 .net] cuはSIGHUPで殺すんじゃ無かったかな うろ覚えだけど
495 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/12(金) 10:21:20.12 .net] cuを起動/停止するスクリプトを書いて それをcronから呼び出したらどうかな 起動する時はrun_cu start、停止する時はrun_cu stopみたいな形で で、起動する時に cu -l /dev/ugen0.2 > 160211.log & echo $! > /var/run/lock/run_cu.lock とやっておいて、停止するときは kill -HUP $(cat /var/run/lock/run_cu.lock) みたいにすれば(要するに/etc/init.dにあるデーモンの起動スクリプトみたいな感じ)
496 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/12(金) 11:56:41.13 .net] いまいちよくわからん スクリプトでプロセスIDが調べられないとかじゃないよね? あとユーザが違っててrootのプロセスkillしようとしてるとか?
497 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/12(金) 13:36:32.98 .net] cuは送信プロセスと受信プロセスがいるから完全に殺せてないのでは
498 名前:480 mailto:sage [2016/02/12(金) 20:39:39.88 .net] 先ほど完了しました。 minicomの改造と、ログファイルの処理ソフト作るのに丸一日かかった。 1日vi使ってたから2chに書き込むのもj,k,l,hでカーソル移動したくなる。 >>484 >>487>>488 うん・・・。できたり、できなかったり。 なんかcu -l /dev/ttyU0 > /unko/tinko/manko/log.txtを実行して、 ps ax | grep cu | grep -v grep で、2つ出てきたり、出てこなかったり。 で、2つ出る場合には片方をkillしようとするとそんなプロセスないとか言われたり。 なんかもう、良く分からなくて投げ出しました。 >>485 SIGHUP知りませんでした。 minicomのソースの終了処理の中に SIGHUPなんちゃらと書いてあったので、多分それが正解ですね。 いやぁ、SIGHUPで四苦八苦しました。 >>486 それスマートですね。私が作ったやつよりもw ただ、まぁ、minicom使ったことでタイムスタンプ入れれたので、良しとします。
499 名前:480 mailto:sage [2016/02/12(金) 20:42:48.13 .net] ちなみに何を作っていたかというと、温度計測システムです。 Xbeeってやつに温度センサーをつないで、無線で親機のXbeeに飛ばして、 親機からPCにシリアルで温度センサーの値を送信するシステムです。 で、ログファイルをsambaにおいておいて、別のPCから見る感じです。 テスト用に温度センサーは1個ですが、部屋中に設置する予定です。
500 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/13(土) 00:30:17.31 .net] viを使っている人はシェルのキーバインドもvi風?
501 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/13(土) 02:17:17.74 .net] >>489 pkillでできなかったの?
502 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/13(土) 02:27:10.99 .net] ちなみに自分は絶対止めたいときは複数回killする やり方はループするなりsleepで間隔あけたりまちまちだけど 以下cuのマニュアルだけど仕様を理解するって大事だね > リ モートシステムとの間でコネクションが設定された場合、 cu > は 2 プロセスを fork します。1 プロセスは、ポートからの デ > ー タ読みだしと端末へのデータ書き込みを行ない、もう 1 プロ > セスは、端末からのデータ読み出しとポートへのデータ書き込み > を受け持ちます。
503 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/13(土) 21:20:59.35 .net] bashで調べてもわからないので質問させてください。 次のような記述のとき、 この%はどのように解釈したらいいのでしょうか? OLDPATH=(../help/me) NEWPATH = $(OLDPATH:../%=./%_fuga) 文字列置換に使う場合と違うようですし、 調べても文字列置換以外に定義がでてきませんでした。 よろしくお願いします。
504 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/13(土) 22:07:33.70 .net] >>494 [user@f23 ~]$ OLDPATH=(../help/me) [user@f23 ~]$ NEWPATH = $(OLDPATH:../%=./%_fuga) bash: OLDPATH:../%=./%_fuga: そのようなファイルやディレクトリはありません bash: NEWPATH: コマンドが見つかりませんでした...
505 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/13(土) 22:26:10.26 .net] linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html より ${parameter%word} ${parameter%%word} パターンに後方一致した部分を取り除く。 word が展開され、パス名展開の場合と同じようなパターンを作ります。 このパターンが parameter を展開した値の末尾の部分とマッチする場合、展開結果は parameter を展開した値から 最短一致パターン (``%'' の場合) または最長一致パターン (``%%'' の場合) を取り除いたものになります。 parameter が @ または * である場合、 パターンを削除する操作は全ての位置パラメータに順番に適用され、 展開結果はリストとして 得られます。 parameter が @ または * が添字になっている配列変数である場合、 パターンを削除する操作は配列の全て の要素に順番に適用され、 展開結果はリストとして得られます。 $()じゃなくて${}だんべな。 私は良くわかんない。後は詳しい人にまかせた。
506 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/13(土) 22:38:34.46 .net] >>495 なんでOLDPATH=の閉じカッコを半角に、そこだけ改変しちゃったの?
507 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/14(日) 00:07:40.09 .net] >>494 どこでそういう記述を見つけたのかな
508 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/14(日) 04:49:47.49 .net] 仕事で改修やってるんだろ
509 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/14(日) 06:05:22.06 .net] どのように解釈したらいいも何も、NEWPATH の次にスペースが有る時点でおかしい 例示を見直して提示し直さない限り、どうにもならんな
510 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/14(日) 08:13:57.65 .net] なんの脈絡もない質問に答える義理はない 金払って仕事してもらえ
511 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/14(日) 09:11:58.95 .net] OLDPATH:../%=./%_fuga という相対パスで指定されたファイルを実行し、その結果の前に=をおいてNEWPATHというコマンドを実行する
512 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/14(日) 14:58:59.31 .net] >>494 Makefile 全体とは言わんがもっと前後貼れよ
513 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/15(月) 05:51:37.58 .net] >>494 >>503 ここを釣り堀にする奴がいるとは思わなかったwww そういえば Makefile を書いている時は似てるなあって思ったな
514 名前:503 mailto:sage [2016/02/17(水) 23:08:47.15 .net] >>494 は結局返事なしか。 釣りだったってことかな。 イコールの前後に空白いれたり入れなかったりだったし。 一応 make/Makefile での動作例。 $ cat Makefile OLDPATH = ( ../datadir1 ../datadir2 ) NEWPATH = $(OLDPATH:../%=../%_fuga) all: @echo "$(NEWPATH)" $ make ( ../datadir1_fuga ../datadir2_fuga ) %の使い方は quruli.ivory.ne.jp/document/make_3.79.1/make-jp_5.html の 6.3.1節を参照しました。
515 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/23(火) 08:45:41.83 .net] BASH4.2 $> echo $((1 == 2)) 0 #!!! BASH4.2 $> echo $((1 != 2)) 1 #!!! BASH4.2 $> a=0 BASH4.2 $> echo $a 0 BASH4.2 $> echo $((a++)) 0 #? BASH4.2 $> echo $((a++)) 1 BASH4.2 $> echo $((a++)) 2 BASH4.2 $> echo $((a++)) 3 BASH4.2 $> echo $((a--)) 4 #!!!! BASH4.2 $> echo $((a--)) 3
516 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/23(火) 10:11:09.22 .net] 不思議なことは何も起きていないな シェルスクリプトの真偽値の表現と後置演算子の意味くらい覚えておけ
517 名前:名無しさん@お腹いっぱい。 [2016/02/24(水) 08:11:13.70 .net] $a=0; echo $((a++)) 0 $ a=0; echo $((++a)) 1
518 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/24(水) 16:41:23.49 .net] なんら不思議でない
519 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/25(木) 07:06:49.38 .net] $ a=0; echo $(( ´∀`)) ( ´∀`): コマンドが見つかりません
520 名前:名無しさん@お腹いっぱい。 [2016/02/26(金) 20:53:20.57 .net] かわええ
521 名前:名無しさん@お腹いっぱい。 [2016/02/26(金) 22:13:00.20 .net] うまくクオーテーション回避したね
522 名前:名無しさん@お腹いっぱい。 [2016/02/26(金) 22:23:19.78 .net] $ a=0; echo $((a++++++a)) 2
523 名前:名無しさん@お腹いっぱい。 [2016/02/26(金) 22:30:46.28 .net] $ a=0; echo $((a+ +++++a)) 1 $ a=0; echo $((a+++++ +a)) 1 $ a=0; echo $((a+ ++++ +a)) 0
524 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/27(土) 19:01:27.83 .net] こういう解釈かな? $ bash -c 'a=0; echo $(( ( a++ ) + +( ++a ) ))' 2 シェルによって解釈が色々みたいだけど $ ksh -c 'a=0; echo $((a++++++a))' k
525 名前:sh: a++++++a: assignment requires lvalue $ dash -c 'a=0; echo $((a++++++a))' 0 [] [ここ壊れてます]
526 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/29(月) 18:15:35.93 .net] ここにいる人たちは誰かのシェルスクリプト見て 普通のプログラミング言語のようにループして処理してたら ぷっって笑っちゃう方?
527 名前:名無しさん@お腹いっぱい。 [2016/02/29(月) 18:57:25.92 .net] え? ループ処理しちゃ駄目なの?
528 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/29(月) 19:53:29.46 .net] >>516 が言う「ループ」とは変数のインクリメント((++i))とかのことかと。
529 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/29(月) 20:08:57.21 .net] >>516 コマンドの内部でループしているのと、スクリプトのループとは速度が違うし また記述も単純になるから、自然とそうなるだけだし スクリプトで人を笑ったりとかはしないかな
530 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/29(月) 20:36:41.53 .net] どんなループだよ
531 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/01(火) 12:43:43.79 .net] それより i=`expr $i + 1`が笑われないか心配。普通だよね(´・ω・`)
532 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/01(火) 12:55:47.44 .net] [ "z$1" = "ztest" ] とかも笑われてるの?
533 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/01(火) 13:57:23.36 .net] 話の流れが読めなかった >>519 が笑われてる
534 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/01(火) 20:21:04.65 .net] >>522 じゃ、どう書くと笑われないと思うんだ? でも、最近はcaseで比較する事が多い。個人的に。
535 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/02(水) 00:02:25.01 .net] >>521 www.shellcheck.net/ SC2006 Use $(..) instead of legacy `..`. SC2003 expr is antiquated. Consider rewriting this using $((..)), ${} or [[ ]]. SC2086 Double quote to prevent globbing and word splitting.
536 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/25(金) 00:25:36.80 .net] bash上でwhich sourceってコマンド打った時にsourceコマンドが見つからないって怒られるのが謎だったんですが、sourceコマンドはbashの組み込み関数だと聞きました。 ただdeclare -Fでもsourceって関数は定義されてないようなんですがどこで定義されているかわかりますか?
537 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/25(金) 01:32:44.95 .net] >>526 man source
538 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/25(金) 01:59:04.54 .net] >>526 type source
539 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/25(金) 02:11:33.46 .net] $ type source source is a shell builtin $ help source source: source filename [arguments] Execute commands from a file in the current shell. 定義はソースコードの bash-4.3/builtins/source.def にある source_builtin 関数
540 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/25(金) 05:01:14.68 .net] >>527-529 ありがとうございます! ばっちりです!
541 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/02(土) 18:56:42.48 .net] >>521 ただ、そういう硬い書き方してる人のスクリプトは、bashの脆弱性が見つかった時でも /bin/bash を /bin/ksh とかで代用できるからなんともいえん。 少なくとも i++ よりはポータブルだし
542 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/08(金) 08:53:02.48 .net] >>521 ほんの数年前までそれ以外の書き方をすると怒り出す、 純正シェルジジイが粘着してたんだが、リアル墓場行ったかな。喜ばしい事だ
543 名前:名無しさん@お腹いっぱい。 [2016/04/09(土) 20:08:53.43 .net] 我がスレ差分メール配送システムが2ヶ月くらい止まってたかのように 見えたのは、2ch鯖が変わっていたせいであったかw 今頃きづいたという。。。
544 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/12(火) 18:45:07.55 .net] 初心者です。 こんどbashをやることになったのですが、シェルスクリプトの書いて覚える系のいい書籍はないでしょうか? 馬鹿なので読んだだけでは理解できないので手を動かすタイプのを教えてください。
545 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/12(火) 19:26:46.24 .net] >>534 シェルプログラミング実用テクニック
546 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/12(火) 20:11:06.76 .net] よろしくお
547 名前:ヒがいします。シェル初心者です。わかんないので、 いろんなサイトに書き込みしても いろいろ うるさく 叱られます。これがユニックスの流儀なんでしょうか? とくに言われることは「スクリプトに直接関係ないこと」は書き込むな、と言うことです。 「何でも教えてくれや」「ケチケチすんなよ」「初心者には親切にせろ」 ひとことで言うと これがおれの主張です。シンプルです。 なんで?現実生活でヘイコラしてるのに、ネット上まで、ネコかぶったり しないといけないのか?とんと理解できません。 何より、バッシュとかGシェルとか、詳しいのが、なんでエライのか? ここが根本的にわからん。 少し誇張した部分もありますが、素直な気持ちを書きました。 [] [ここ壊れてます]
548 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/12(火) 20:22:51.31 .net] >>535 ありがとうございます。明日立ち読みしてみます。 >>536 あなたより大きい会社にいると思います。30前にして年収800万です。 ずっとWindowsだったのでわからないんですよね。
549 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/12(火) 20:25:20.93 .net] >>536 得意分野などで教える立場になった時、同じこと思うだろうか。
550 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/12(火) 20:38:02.87 .net] 今の大きい会社って30前でもそんなモンなの? 小さい会社だと1000越えてるのにね。
551 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/12(火) 22:24:19.26 .net] >>536 おまえ Limux Mint 公式フォーラムでアラシ認定されたやつじゃね?
552 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/13(水) 01:49:11.16 .net] >>539 正社員なら800でもマシな方 なんせ上が詰まっててなかなか上がらないし でもフリーや少数精鋭のとこなら1000は余裕で行く
553 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/14(木) 09:18:08.49 .net] うちはもう1000万じゃなくなったよ
554 名前:名無しさん@お腹いっぱい。 [2016/04/14(木) 22:19:32.09 .net] >>534 サンプルコードがあるような本でも分からないなら、シェルスクリプトはやめた方がいい。
555 名前:名無しさん@お腹いっぱい。 [2016/04/14(木) 22:21:13.69 .net] >>534 「入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界」を読みなさい。
556 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/15(金) 08:51:58.72 .net] ネタだろうけど、あんまり古過ぎる本勧めてやるな。
557 名前:名無しさん@お腹いっぱい。 [2016/04/15(金) 11:45:17.59 .net] >>545 そもそもシェルスクリプト自体が変わっていないが?
558 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/15(金) 21:13:21.13 .net] だよね。 さすがに絶版だったらおいおいと思うが。
559 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/16(土) 00:27:13.14 .net] >>532 と言ってたら、bashの脆弱性が見つかったのは数年前だね
560 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/16(土) 05:01:00.01 .net] 明日は我が身だが、2つの変数が両方とも空だった確率が0%じゃなければ、事故が起きてしまうな。 この場合は、どう書けばよかったの? business.newsln.jp/news/201604151116100000.html レンタルサーバー業者で、従業員のミスによりサーバー上の全データが削除されるという あり得ない事態が生じたことが14日、英大手紙「Independent」の報道で明らかとなった。 このレンタルサーバー業者では、削除してしまったデータを復元するために、大手QAサイトのserverfaultに 「Recovering from a rm -rf /(rm -rf /から復元する方法を教えてください)」とする書き込みをすることで、 問題の解決方法を模索しているが「バックアップがない限り、復元は難しい」といった回答も寄せられている。 QAサイトのserverfaultでは、日ごろ、初心者からの質問から、かなりの高度な質問まで、様々な質問が寄せられるとただちに、 最適な回答が付く状態が続いているが、さすがのserverfaultの熟練回答者であっても 会社の全データを「rm -rf /」で削除した後にどのような有効な復元策を講じることができるのかは、回答に詰まる状況となっている。 このミスをしてしまったレンタルサーバー業者の管理人となるMarco Marsalaによると、 プログラム中で、「rm -rf {foo}/{bar} 」と指定することで全サーバーを対象に、特定のディレクトリーのファイルだけを削除するスクリプトを動かしたところ、 このプログラムのバグにより、特定のディレクトリーだけでなく、全てのディレクトリーが強制削除の対象になってしまったと説明している。 また、バックアップを事前に取っていなかったのかという質問については、 もちろんバックアップは取得していたが、この全削除のプログラムによりバックアップファイルも削除の対象となってしまったと述べている。 このレンタルサーバー業者は、1535のカスタマーを抱えているが、この事故の発生により、これら全てのカスタマーのファイルが無くなってしまった。