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


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

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



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/

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のカスタマーを抱えているが、この事故の発生により、これら全てのカスタマーのファイルが無くなってしまった。

561 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/16(土) 09:24:48.15 .net]
だから/は変数の中に入れておけとあれだけ

562 名前:名無しさん@お腹いっぱい。 [2016/04/16(土) 10:06:55.21 .net]
>>550
そういう問題ではない。

563 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/16(土) 10:35:23.38 .net]
>>551
だったらどういう問題?

564 名前:名無しさん@お腹いっぱい。 [2016/04/16(土) 10:51:02.13 .net]
>>552
なんでテストしてないの?

565 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/16(土) 11:15:01.02 .net]
バグがあっても大丈夫な設計を心がけろという話なのに
なんでテストしていないという話になる?頭大丈夫か?

566 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/16(土) 11:25:08.28 .net]
あまりにアレで何か別のことを隠すためのうんたらかんたらを妄想してしまう記事だな



567 名前:名無しさん@お腹いっぱい。 [2016/04/16(土) 13:52:26.18 .net]
>>554
設計があって、テストをしないのはありえません。

568 名前:名無しさん@お腹いっぱい。 [2016/04/16(土) 13:56:59.02 .net]
>>554
だいたいそれは設計じゃないだろ。

ただのコーディングミスを防げために、コーディングミス用のロジックを書くのは阿呆すぎる。

569 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/16(土) 14:43:59.32 .net]
>>557
フェイルセーフとフールプルーフの違いを学べよ

570 名前:名無しさん@お腹いっぱい。 [2016/04/16(土) 15:25:19.31 .net]
>>558
いかにもインフラの人間がいいそうなことだが、キミは開発側ではありえない助言をしている。

571 名前:名無しさん@お腹いっぱい。 [2016/04/16(土) 15:27:25.43 .net]
検証もしないで、ぶっつけ本番でそういう構成になっているから大丈夫という考え方はインフラでもありえない。

572 名前:名無しさん@お腹いっぱい。 [2016/04/16(土) 15:28:05.09 .net]
そもそも操作ミスではないじゃん。

573 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/16(土) 16:30:24.50 .net]
バックアップは特定の権限でしか消せないとか、削除可能な範囲を絞るとか
万が一のためインフラ側で制限しないとダメなんだよ
それでもダメなときはダメだし

設計・テストとかプログラムのみでの対応はコストだけが跳ね上がるし現実的ではない
ジョブ管理システムやコンパイラのバグが絡んでくるともうお手上げになる

574 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/16(土) 18:08:55.67 .net]
シェルスクリプトなのにコンパイラのバグ?

575 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/16(土) 19:49:59.88 .net]
例で示しただけだから別にインタプリタでもなんでもいいよ

576 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/17(日) 01:23:14.24 .net]
バグに絡まれやすそうな奴だな



577 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/17(日) 07:15:51.53 .net]
>>549
rm -rfはシェル関数で。直接使う事は禁則。
rmしないでmv。定期的に掃除

578 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/18(月) 20:09:07.34 .net]
>>549
japanese.engadget.com/2016/04/15/rm-rf-qanda/

579 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/18(月) 20:24:48.32 .net]
ひでーw
__
タヒんでしまえよ

580 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/18(月) 22:44:34.25 .net]
シェルショッカーとかいうおじさんおるよな

581 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/25(月) 19:04:26.09 .net]
bashで、新しいscreenウィンドウを開いてそこで引数で指定したコマンドを実行する関数
を作りたいのですが、引数の展開をどうやればいいかで悩んでいます。
# 例:sc tail -f ./hoge.log
sc() {
# "cd $PWD; $@"ではダメだった
screen -t "$1" -X screen bash -c "cd $PWD; '$1' '$2' '$3' '$4' '$5' '$6' '$7' '$8' '$9'"
}
10個以上の引数に対応するにはどう書くのがいいでしょうか?

582 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/25(月) 21:45:04.21 .net]
>>570
"cd $PWD; $@" だと screen のコマンド全体が、
"screen" "-t" "$1" "-X" "screen" "bash" "-c" "cd $PWD; $1" "$2" ...
という引数に展開される。
これは "cd $PWD; $@" がまず、"cd $PWD; ""$@" に変換され、
"$@" が "$1" "$2" ... に展開されて
"cd $PWD; ""$1" が連結されて "cd $PWD; $1" になるため。

なお set - "$@" cd "$PWD" ";" "$@" したら、 screen に渡るのは ; までで肝心のコマンドは渡らない。

"cd $PWD; $*" だと "cd $PWD; $1 $2 $3 ..." (配列としては展開されずに1つの文字列扱いになる)
に展開されて意図した動きになる。 ただ、引数に空白が入る場合はエスケープ入れないとNGね。

583 名前:570 mailto:sage [2016/04/26(火) 19:09:31.05 .net]
空白のエスケープはどうやればいいんでしょう?

584 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/26(火) 19:43:17.56 .net]
>>572
シングルクォートと空白の例。
sc() {
  screen -t "$1" -X screen bash -c "cd $PWD; $*"
}

sc date +Date=\\\'%y\\\ %m/%d

585 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/27(水) 12:24:16.19 .net]
...なんだかなあ
与えたスクリプトの中で、展開すれば?
sh -c 'some command; "$@"' 'dummy' "$@"


sc() {
  screen -t "$1" -X screen bash -c 'cd $PWD; "$@"' 'dummy' "$@"
}

586 名前:570 mailto:sage [2016/04/27(水) 19:13:45.99 .net]
なるほど、dummy 以降が -c で与えたコマンドへの引数になることを利用するわけですね。

ちなみに
screen -t "$1" -X screen bash
は冗長で
screen -t "$1" bash
でいいみたいでした。



587 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/27(水) 21:07:51.80 .net]
-c の次の次の引数からが $0 以降になるとは知らなかったなぁ。 勉強になったわ。
これは -c AAA BBB CCC DDD ... のとき、BBB 以降は実行されないけど BBB が $0 として、
CCC DDD ... が引数としてセットされた状態でプロセスが開始され、実際に実行される内容の
AAA 内に展開されずに渡された "$@" があるので CCC DDD ... が実行されるってことかな。

ちなみに cd の部分は 'cd "'"$PWD"'"; "$@"' の方がいいかな。
( パスに空白が入っていてもエラーにならないがダブルクォーテーションが入っていたらNGではあるが。 )

588 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/12(木) 21:13:45.79 .net]
コマンド応答が返ってくるまでの表示に文字を回転させてりしてみたくなった。
例えば、「*」がくるくると回っていたり・・・






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

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

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