- 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/
- 433 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/01/31(日) 21:09:13.08 .net]
- procps-ng の uptime の説明が分かりやすい
uptime(1) - Linux manual page man7.org/linux/man-pages/man1/uptime.1.html
- 434 名前:名無しさん@お腹いっぱい。 [2016/02/02(火) 07:53:41.39 .net]
- >>424
さんくすです。 2コアだから、負荷は半分にした値を考えておけばいいのかな。 >注目するのは、待ちタスク数を数え上げるのにすべてのキューを見て >合計する一方、その後出力するまでに CPU の数でその値を割ったりは >していない、という点です。...ロードアベレージは割り算をしていない
- 435 名前:名無しさん@お腹いっぱい。 [2016/02/02(火) 07:57:31.80 .net]
- >>425
頑張って読みます。どもです。
- 436 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/02(火) 09:57:29.33 .net]
- 待ち行列とかキューとかの意味がわからずサーバー管理やってるんならな
OSのしくみをほんの少しでも勉強したほうがいいよ 特にタイムシェアリングとかプロセス管理のあたり
- 437 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/02(火) 11:43:42.95 .net]
- >>426
別に割る必要はないと思うけど どれくらい溜まってるかを知りたいならだけど
- 438 名前:名無しさん@お腹いっぱい。 [2016/02/02(火) 17:43:21.96 .net]
- UNIX上で、”コマンドを利用した”スクリプトを書き始めよう
と思っています。 そこで、pythonかbashのどちらを選ぶかで迷っています。 今日pythonパイソンの有名どころの本をみたら外部コマ ンドの利用についての記述が少なくてがっかりしました。 素直に以下の本を読むべきなのでしょうか? それともpythonの勉強し
- 439 名前:ト、ネット上で外部コマンドの
利用を紹介したサイトも勉強すべきなのでしょうか? アドバイスお願いします http://www.amazon.co.jp/gp/product/4797321946/ref=ox_sc_act_title_1?ie=UTF8&psc=1&smid=AN1VRQENFRJN5 [] - [ここ壊れてます]
- 440 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/02(火) 18:59:58.26 .net]
- >>430
マルチ hayabusa6.2ch.net/test/read.cgi/linux/1452251761/324
- 441 名前:名無しさん@お腹いっぱい。 [2016/02/02(火) 20:16:40.85 .net]
- 言語はあくまで道具
何をしたいかによる
- 442 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/02(火) 21:43:18.36 .net]
- >>432
レスありがとうございました。マルチってそんなにいけないことなん ですね。失礼しました。 5年以上ぶりぐらいに2chに戻ってたんで驚いてます。 板にもよるのでしょうが。 こちらだけにすればよかったです。 432さんのおしゃる通りだと思います。自分にとってはコマンド 利用してみたいので、まずはbashにしようかなと思ってます。
- 443 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/02(火) 22:48:53.08 .net]
- マルチ禁止は2chだけのルールではなく20年以上前のRFCにさえ書かれている基本中の基本
- 444 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/02(火) 23:02:32.01 .net]
- おまえら叩きすぎw
329 名前:324[sage] 投稿日:2016/02/02(火) 21:44:34.24 ID:KBWlYUE4 [2/2] 失礼しました。 ルール知りませんでした。5年以上2chやっていなかったので。 330 名前:login:Penguin[sage] 投稿日:2016/02/02(火) 22:53:07.59 ID:tNcqGKOV >>329 5年前でもマルチはアカンかったでしょ 331 名前:login:Penguin[] 投稿日:2016/02/02(火) 22:54:56.17 ID:9nG661Lj [2/2] 2chに限らずどこでも嫌われるでしょ 332 名前:login:Penguin[sage] 投稿日:2016/02/02(火) 23:00:54.39 ID:ZV8eeIqB [2/2] 本人はそう思ってないんだろう 死ね
- 445 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/03(水) 00:07:58.02 .net]
- たたかれても懲りずに勉強してね
スクリプトを色々と探してきて、長さ順にリストアップする { IFS=:; find $PATH; } | xargs readlink -e | xargs file | grep ' script' | while IFS= read -r line do echo "$( echo "$line" | cut -d : -f 1 | xargs wc -l )$( echo "$line" | cut -d : -f 2 )"; done | sort -k1gr,1
- 446 名前:名無しさん@お腹いっぱい。 [2016/02/03(水) 06:35:39.85 .net]
- だいたい、bashとpythonどっちかっていう問題か?ww
どっちも並行してやるべき。
- 447 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/04(木) 06:50:05.93 .net]
- 『20年動く』本読んだけどひたすら方言に配慮する話書いてあった
もうpythonでいいや
- 448 名前:名無しさん@お腹いっぱい。 [2016/02/04(木) 08:44:03.15 .net]
- >>438
pythonは後付けのなので、そのうちなくなるかもしれません。 Windowsにはそういうものがありました。
- 449 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/04(木) 08:55:41.67 .net]
- なくならないにしても、python2のスクリプトのかなりがpython3で動かなくなるよ
- 450 名前:名無しさん@お腹いっぱい。 [2016/02/04(木) 09:06:11.16 .net]
- pythonはなくなってもUNIXは困らない。
- 451 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/05(金) 01:28:36.41 .net]
- >>441
vimの拡張にpythonが採用されてることを知らないのか…
- 452 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/05(金) 02:35:34.81 .net]
- POSIXにvimもpythonも入って無いしな
- 453 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/05(金) 02:49:11.38 .net]
- UNIX開発にふつーにVIM使われてるぞ
- 454 名前:名無しさん@お腹いっぱい。 [2016/02/05(金) 04:13:16.68 .net]
- 特定のアプリケーションが使っているから、OSに必要という理屈が分からない。
- 455 名前:名無しさん@お腹いっぱい。 [2016/02/06(土) 04:39:26.36 .net]
- >>438
方言覚えるのとPython覚えるの、労力そんなに違うか?
- 456 名前:名無しさん@お腹いっぱい。 [2016/02/06(土) 06:08:30.34 .net]
- シェルスクリプトはOSの一部だからな。
pythonとは格が違う。
- 457 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/06(土) 09:18:43.54 .net]
- #!/usr/bin/shと書いてもbashが走るこんな世の中じゃ
- 458 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/06(土) 17:24:54.45 .net]
- #!/usr/bin/shと書いてシェルスクリプトを名乗るのか。
- 459 名前:名無しさん@お腹いっぱい。 [2016/02/06(土) 18:52:59.16 .net]
- >>448
bashがbshのマネをする変なスクリプトたがら推奨しない。
- 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 が笑われてる
|

|