1 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 12:07:26.41 .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に逃げずにシェルスクリプトで処理するのが頭のいいやり方。 前スレ シェルスクリプト総合 その25 echo.2ch.net/test/read.cgi/unix/1439563321/
537 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/15(木) 21:10:36.33 .net] awk使うのが妥当。 awkが嫌なら、標準入力をファイルにコピーしてから複数回に分けて処理するしかないな。
538 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/15(木) 21:26:45.83 .net] やりたい事はシンプルなのに標準入力使おうとしてるせいで妙に面倒になってるな awkかgrepでよさそうだが
539 名前:名無しさん@お腹いっぱい。 [2018/02/15(木) 21:36:30.68 .net] 事前にソートしたら?
540 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/15(木) 21:38:59.09 .net] tacは?
541 名前:名無しさん@お腹いっぱい。 [2018/02/15(木) 21:41:36.03 .net] $PATHの中身って最初は空じゃないの? $PATHをechoしてみたら,その中に ~/.bashrcや~/.bash_profileでexportされてるパス以外のモノが含まれてた でも$PATHに初期値を設定できるならわざわざ~/.bashrcや~/.bash_profileでexportする必要なくない? どうなってるのか教えてくれ
542 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/15(木) 22:34:13.00 .net] OSによるけどinit.dの中とかlogin.confとかでデフォルトを設定する。 ここ書き換えると全ユーザに影響が出るので、個別設定は.bash_profileとかに書く。 exportするのは万一PATHなしで起動されてしまったとき用。
543 名前:名無しさん@お腹いっぱい。 [2018/02/16(金) 02:23:59.63 .net] >>504 > すんませんけど 今割り当て端末数からこんな感じでサブネットマスクを出すのを作ったんですけど ipcalcコマンドで行けるんじゃね? 知ってるだけで使ったことないけど 他にもiptabとかipcountとかあるらしいな
544 名前:名無しさん@お腹いっぱい。 [2018/02/16(金) 08:44:35.62 .net] >>525 最初に自身で書いてたようなんで十分じゃないの? パイプで渡せないというのが何を嫌がってんのかによるけど テキストなら貯めてechoしたっていいんじゃ DATA="$(cat -)" && cat $KEYWORDFILE | while read KEYWORD ; do ( echo "$DATA" | grep "$KEYWORD" ) && break ; done データでかいから捜査対象の方を1パスで捜査したいってことなら シェルスクリプトでがんばるより別のことでがんばろう
545 名前:名無しさん@お腹いっぱい。 [2018/02/16(金) 20:37:24.42 .net] >>533 ありがとやっと有益なレスが出たよ 他のやつは揃いも揃って無能な役立たずばっかりだから
546 名前:名無しさん@お腹いっぱい。 [2018/02/16(金) 20:41:32.04 .net] ショッアーーーーーーーーー!!! さってビットコインを盗むか
547 名前:名無しさん@お腹いっぱい。 [2018/02/16(金) 21:23:29.93 .net] アホにレスした俺もアホだった。 やっぱアホはスルーに限る。
548 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/17(土) 02:29:48.74 .net] >>533 俺も普通は ipcalc 使ってるけど最近は sipcalc というのもあるらしい。 紹介してくれてる iptab とか ipcount 含めて今度試してみようと思う
549 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/20(火) 18:16:48.11 .net] シェルスクリプトの函数で扱える文字数に上限はないのでしょうか。 pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_05 ↑ここが多分公式の文書だと思うのですが,使用可能な文字の種類に言及こそすれ,文字数については触れていないように思いますが…… ファイル名などの上限と同じく255文字でしょうか?
550 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/22(木) 02:57:44.82 .net] >>539 255文字かどうかは、質問するまでもなくすぐにわかると思いますよ。
551 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/22(木) 05:46:35.30 .net] ワロタ、試せよwそして調べろよって話だよな
552 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/24(土) 22:51:48.88 .net] $ :> "$(yes a | head -n 255 | tr -d '\n')" $ :> "$(yes a | head -n 256 | tr -d '\n')" sh: 1: cannot create aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: File name too long
553 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/25(日) 16:39:26.69 .net] ファイル名の文字数上限はファイルシステムに依存する
554 名前:名無しさん@お腹いっぱい。 [2018/03/03(土) 23:53:36.62 .net] シェルスクリプトで有るコマンドを実行した時、 標準出力の内容を緑に、標準エラー出力の内容を 赤にしたいんだけどどうすればいい? 本当に聞きたいことはエスケープシーケンスではなく、 標準出力と標準エラーをそれぞれ別々に加工する方法ね
555 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/03(土) 23:53:52.11 .net] ちなみにファイルに吐き出さずにやりたい
556 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/04(日) 01:26:00.19 .net] お前にはなんか教えたくない
557 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/04(日) 01:40:31.82 .net] なんかググればすぐ出てきそうな
558 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/04(日) 02:21:55.51 .net] それがないんだよね。標準エラー出力を標準出力に 変えてしまうのは有るけど、それじゃ別々にやるのは不可能だし
559 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/04(日) 16:46:18.09 .net] 条件が厳しいからどうしてもシェルスクリプトでやりたいなら 先ずシェルを作るところから始めないといけない
560 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 00:43:32.66 .net] bashやzshなら簡単に出来るぞ
561 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 01:06:07.74 .net] 出力を切り離してパイプで別々のコマンドでフィルタする程度じゃ全然駄目だから こういうのを簡単にできると言い切る人はきっとものすごく優秀な頭脳の持ち主だと思う
562 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 01:28:58.62 .net] これは書いていなかった俺が悪いんだが、 bashやzshを使わずにposixの範囲でやりたいんだよね。 少なくともdashやashで動くものがほしい でその方法が実際にあることは知ってるんだけど、 もっとシンプルな方法はないのだろうかと言うのと 俺がその方法をここに書いちゃうと 身バレしちゃうので書かなかった
563 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 12:24:32.78 .net] >>551 > 出力を切り離してパイプで別々のコマンドでフィルタする だけやぞ
564 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 18:09:38.99 .net] POSIXに準拠したい気持は分かるけど,一次ファイルを作らないっていう謎の拘りが理解できない。 両立させるのは厳しいと思う。もうさ, tempf="$(printf '%s%s%s%s' '/tmp/' "$(date +"%y%m%d%H%M%S")" '.' "$$")"; somecmd 2> "${tempf}" | \ printf '\e[1;32m%s\e[0m\n\e[1;31m%s\e[0m\n' "$(cat)" "$(cat "${tempf}")"; rm -rf "${tempf}" でいいでしょ。もちろんPOSIX準拠。 あと偉そうなこと言うが,「身バレが怖いから持ってる (有益かもしれない) 情報を明かしません」って, こっちからするとかなり不快だから,黙って何も知らないふりをしておいたほうがまだマシだよ。
565 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 18:12:03.21 .net] 落ち着け 最初の質問の時点で性格の幼稚さは見え透いてるだろ
566 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 19:58:23.46 .net] >>550 やり方教えて
567 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 21:20:34.93 .net] >>554 > 一次ファイルを作らないっていう謎の拘りが理解できない。 書いてなかったのが悪いんだろうけど、一時ファイルを使うと ストリーミングで処理できなくなるんだよ つまり前のプログラムの出力が完了しないと次のプログラムが動かない POSIX準拠はbusyboxで動かす必要があるからこれも必須 この二点は今回の質問には直接関係ないから理由じゃなくて制約として書いた
568 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 21:25:58.36 .net] そしてこっちの方で回答きたよ くだらねえ質問はここに書き込め!Part 230 https://mao.5ch.net/test/read.cgi/linux/1515383155/315 同じ文章なのになんでこう反応が違うんだろうね 同じ文章なんだからレスする側の問題があるだろうね 質問する側と回答する側、立場は対等だって言ったら怒りそう
569 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 21:38:48.22 .net] >>554 あとmktemp使ったほうが良いよ。 なんでぜったいにかぶらない方法があるのに 自分でなるべくかぶらないように努力するんだろう 結構多いよね。mktemp使ったほうがコード短くなるのに
570 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 21:48:54.27 .net] 自分自身は何もしてないのになぜこうも態度をでかくできるのか
571 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 21:57:02.07 .net] 別にでかくないでしょw ほかの人と一緒。 質問したからといってへりくだる必要はないと思ってるだけ 無知でもないしね
572 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 22:10:47.74 .net] マルチカスか 教えたがりを徹底的にこき使っとけ ここには二度とくるなよ
573 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 22:45:20.19 .net] 少なくとも聞く側の態度じゃぁないな
574 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 22:54:52.33 .net] 聞く側はこういう態度を取らないといけないって 体育会系とか年功序列とか年上は敬え的な考え方だよ 今時はやらない
575 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 23:15:38.51 .net] 545から漂う頭の悪さよ
576 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 23:21:32.35 .net] >>558 のそれ「解答」じゃないじゃん。 無理って言われてるんだぞ? 理解できてる?
577 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 23:23:14.97 .net] もういいじゃん ほっとけよ
578 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 23:23:16.19 .net] どういう態度取るべきとは思わないけど、 相手を不快にさせたら得られるはずの回答も得られなくなる可能性が上がるよ。 それでよければご自由に。
579 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 23:26:33.25 .net] 出力が色制御してきたら取り除いたりとか、マルチプロセスとかで変なところでブッタ斬り/ミックスされないように同期取ったりとか考えてたけど俺には無理だからもういいや
580 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 23:33:38.33 .net] >>566 やりたいこと > 標準出力の内容を緑に、標準エラー出力の内容を > 赤にしたいんだけどどうすればいい? 標準出力の内容を緑にする・・・簡単 標準エラー出力の内容を赤にする・・・? >>558 で明らかになったこと ・・・ 標準出力と標準エラー出力を入れ替える方法 ここから標準エラー出力の内容を赤にするには 標準出力と標準エラー出力を入れ替えれて 処理すればいいって気づくよね?
581 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/05(月) 23:47:07.49 .net] >>570 ん? それだと今度は標準出力が (標準エラー出力に複製されたので) パイプを通らなくなるから、 標準出力の内容 (今は標準エラー出力に出力されている) を緑にできないんじゃ?
582 名前:もしかして同時じゃなくていいってこと? [] [ここ壊れてます]
583 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/06(火) 00:20:35.13 .net] もうほっとけ 標準出力、標準エラー出力に関する便利な小ネタでも教えてやろうかと思ったけどやめとくわ
584 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/06(火) 01:01:07.43 .net] >>571 片方ずつしか処理できないなら、 2回やれば両方できるだろ? っていうかそれぐらいわかるだろw
585 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/06(火) 01:01:45.64 .net] >>572 > 標準出力、標準エラー出力に関する便利な小ネタでも教えてやろうかと思ったけどやめとくわ おせーておせーて
586 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/06(火) 01:03:40.69 .net] |& ←このパイプは標準出力標準エラー出力ともに通すよ。 ただ質問者さんが望んでいるのは「標準出力か標準出力かが区別できる状態でのパイプ通過」だろうから、 それはちょっと無理なんじゃないかな。 あと態度がデカすぎる。一度死んだほうがいいと思う。
587 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/06(火) 01:14:26.43 .net] >>573 まさかコマンド二回回すの? 標準出力と標準エラー出力分ける為だけに? それ一時ファイル作るより余程冗長だぞw もう一度シェルっていうかコンピュータの仕組みを勉強しなおしてきな
588 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/06(火) 01:45:01.59 .net] だから一時ファイルを作るとストリーミングに できなくなるからだめなんだって さっきも書いたろ
589 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/06(火) 01:47:17.52 .net] >>575 やっぱり>>558 が今のところ一番シンプルな解みたいだね。 てか、標準出力と標準エラー出力を別々にファイルに吐き出せるんだから、 別々のプログラムにパイプでつなげられる機能があっても良いと思うんだけどね
590 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/06(火) 02:48:45.93 .net] 君たぶんだけど意思疎通に係わる障害持ってるから病院で診てもらったほうがいいよ。 知り合いにそういう調子の会話する人がいて、ある日会社で大きな事件を起こして辞めさせられたあと 病院で検査したらそういう系統の精神病だったからさ。 煽りとかじゃなくて、君はどうも社会で孤立してそうだから、助けになりたい。
591 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/06(火) 03:23:52.46 .net] いや、おちょくってるだけだろ まともに相手するだけ無駄やぞ
592 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/06(火) 04:17:47.54 .net] ここに限らず、質問系のスレにたまに沸くアレでしょ 5chが過疎って最近あんま見てなかったから なんか懐かしい感じするわw
593 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/06(火) 10:26:50.47 .net] レス内容が煽りだけになったらおしまいw
594 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/06(火) 20:25:23.40 .net] あっちで粘着してるみたいだな 久々にアレな奴を見たわ
595 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/06(火) 21:23:37.44 .net] 入力リダイレクトで複数ファイルを一度で流し込むのはどうしたら良いのですか?
596 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/06(火) 21:44:48.81 .net] catしてパイプ
597 名前:watarie [2018/03/06(火) 22:03:33.11 .net] よろしくお願いします。 mac で bashです。 mdfindからパイプつないだ先でcpしたら 検索が間に合わなかったのかコピーし損ねがでてきます。 再度コピーしそこねたファイル名リストを同じようにこれに掛けると、 幾つか成功していくつかはコピーし損ねます。 function readMdfind() { while read LINE; do mdfind "kMDItemFSName == "${LINE}" || kMDItemDisplayName == "${LINE%.*}"" | awk 'NR==1' | xargs -J % cp -p "%" "$1" 2>/dev/null done <${2} 引数の1はファイル名のリストが入ったテキストで、2はコピー先のフォルダになります。 ファイル名は殆どが一意にしてあるので、とりあえずヒットしたら良い感じです。 一度で取りこぼしのない良い方法はありませんでしょうか。
598 名前:watarie [2018/03/06(火) 22:05:40.25 .net] 引数の件1と2逆でした 惑わせてしまい申し訳ありません。 正しくは1がコピー先フォルダで2
599 名前:がファイル名のリストです。 [] [ここ壊れてます]
600 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/06(火) 22:33:41.80 .net] >>585 回答ありがとうございます。 ということはそのまま cat hoge huga | command で、いいってことですか。なるほど。 レスつくまで色々ググって調べてみたのですが command <( cat hoge huga ) でも全く同じ動作ですか?
601 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/06(火) 23:27:44.61 .net] >>588 二番目の方法,たぶんコマンドラインで試して成功したから書き込んでるんだろうけど, それはプロセス置換と言って Bash筆頭に幾つかのシェルの独自拡張だからシェルスクリプトにするときは シェバンを #! /usr/bin/env bash か #! /bin/bash とかにする必要がある。 cat hoge huga | somecommand で代替できることに可搬性を犠牲にするのは避けたいだろうから (つまり #! /bin/sh というシェバンを捨てるのは勿体無いということ) <(cat hoge huga) は避けれる時は (特にシェルスクリプトで使う時) 避けといたほうがいいんじゃないかな。
602 名前:586 mailto:sage [2018/03/06(火) 23:29:38.39 .net] 5行目あたりの日本語がおかしい。けど国語力ないので自然に直すの無理。 察してくれ。
603 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/06(火) 23:43:28.43 .net] >>589 なるほど! #!/bin/sh が必ずbashにリンクされてるとは限らないから、 拡張表現で書かなくて済む場合は確かに可搬性を優先した方がいいですね。 ありがとうございました。
604 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/06(火) 23:49:32.51 .net] >>586 mdfindを知らんので問題解決に直接ならないけれど`done < ${2}`ではなく`done < "$2"`のほうがいいよ〜 もっと言うなら`cat "$2" | while read LINE;`のほうがいいかもね〜 * POSIX sh互換シェルは変数名に数字が来たらそこで読み取りを中断するので波括弧で変数名の範囲を明示しなくていい * 変数$LINEに^Dとかが渡された時catコマンドと<リダイレクトで違いがある 短いんだけど参考: pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07_01
605 名前:588 mailto:sage [2018/03/06(火) 23:58:01.42 .net] あー! さらに調べたら、よくわかりました。 #!/bin/sh でbashを起動したらbashの拡張とか使えなくなっちゃうんですね。 だからシェバンを書き換える必要があると… そういう意味だったんですね。 (ちゃんとmanにかいてありました) ためになりました。
606 名前:名無しさん@お腹いっぱい。 [2018/03/07(水) 07:20:57.39 .net] >>592 ん?どゆこと? $ cat file | cmd $ cmd < file で違いがあるってこと?そうは思えないんだけど…
607 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/07(水) 08:34:45.43 .net] $LINEに^Dってなんぞやってところだな
608 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/07(水) 08:37:52.19 .net] >>586 まずはエラーをnullに落とさずに表示させろ
609 名前:watarie [2018/03/07(水) 09:23:48.67 .net] >>592 さん
610 名前:watarie [2018/03/07(水) 09:32:33.42 .net] >>592 さん ありがとうございます。ちょっと英語で読解が難しいので時間を作って該当の箇所を読ませていただこうかと思います。 {2}の箇所を"2"に変更しました。 <の箇所をcatに変更しました。 非常に目に優しいくなりました。 読み込む箇所なので、怪しいと感じます。結果としては変わりませんでしたが、参照の箇所は興味がありますので読ませていただこうと思っています。英語で弱気になりますが^^; ありがとうございます。
611 名前:watarie [2018/03/07(水) 09:37:28.43 .net] >>596 さん すみません。確かにそうですよね。 初心者過ぎで逃げを当然にしてたバチがあたったようです。 吐き出したエラーは、 cp: /Volumes/Macintosh: No such file or directory cp: HD: No such file or directory などのファイルパスが、スペース区切りになってcp出来ませんでしたよというエラーでした。 ただ、検索に漏れた該当のファイルは何度めかにはヒットしますので上記のエラーとはならなかったということに。 spotlight特有のものだからと諦める
612 名前:オかないのか・・・ これがひょっとしたら手がかりになるかもしれませんが、わたしの力では全く・・・ [] [ここ壊れてます]
613 名前:watarie [2018/03/07(水) 09:45:34.86 .net] すみません、mdfindの検索結果のファイルパスが スペースで割れてしまってcpに渡されたということでした。たぶん^^;
614 名前:watarie [2018/03/07(水) 12:55:37.74 .net] 解けました!ありがとうございます! ダブルコーテーションを%の箇所で囲うのではなく、 1行取り出した先でパイプして囲えば良いと思い以下を試したところ出来ました。 mdfind "kMDItemFSName == "${LINE}" || kMDItemDisplayName == "${LINE%.*}"" | awk 'NR==1' | sed -e 's/^\(.*\)$/\"\1\"/' | xargs -J % cp -p % "$1" 2>/Users/mac10/Desktop/out エラー出力素晴らしいです! ありがとうございました!
615 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/07(水) 18:25:56.09 .net] ずっとageっぱなし…(小声)
616 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/07(水) 19:48:17.38 .net] mdfindとxargsに-0つけるのが定石だと思うけど、もう見てないかな。
617 名前:名無しさん@お腹いっぱい。 [2018/03/08(木) 00:41:50.66 .net] >>578 今更だけど、あるんだよね。誰も教えたくなかったんだね。
618 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/08(木) 01:55:58.38 .net] まああるよね
619 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/08(木) 07:30:07.37 .net] ヒントくらい出すか……。でもあいつに教えたくないんだよなぁ。 卑屈だけど、気持は分かるだろ? パイプに名前(ry
620 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/08(木) 16:44:02.99 .net] それ使うと出力側はこんな感じかな while :;do sed -e 's/\(.*\)/^[[32m\1^[[m/' np1 & sed -e 's/\(.*\)/^[[33m\1^[[m/' np2 >&2; done
621 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/08(木) 20:31:17.47 .net] >>607 野暮な指摘だが、sedを使わない printf '\e[32m%s\[0m' "$(cat)" の方が分かりやすくね? つーか printf ってそういう「整形した出力」の為のコマンドだろうし。
622 名前:604 mailto:sage [2018/03/08(木) 20:32:49.31 .net] >>695 ミスった… printf '\e[32m%s\e[0m' "$(cat)" だ。 こうすると "$(cat)" の部分で np1 を受けt[以下略]
623 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/08(木) 20:51:46.21 .net] >>606 名前付きパイプ(mkfifo)はプロセスが2個あって 片方が出力側プロセス、片方側が入力側プロセスに 別れない限りストリーミングにすることができない (同一プロセスでは出力しながら入力ができないため) 今回の場合、標準出力と標準エラー出力の2つがあるから 出力側プロセス1個と入力側プロセス2個の合計3プロセスが必要になる つまり別プロセスとして起動しなければいけない もちろん出力の完了待ちのwaitも必要だし、作成したパイプの削除も必要。 特にCTRL+Cで中断された場合とか また万全を期してパイプ名が被ることも考慮してランダムな名前にしたい ここまで言えば名前付きパイプを使った方法は実装するのに行数がかかり 面倒な方法だと言うことがわかるだろう? また>>557 で書いたとおりbusyboxで動かす必要があるのだが、 そもそもbusyboxでmkfifoが存在しない場合もある ↑俺にとってはこっちのほうが重要
624 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/08(木) 21:00:55.81 .net] もう来なくていいよ レス続けるならコテハン付けて
625 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/08(木) 21:03:28.88 .net] 粘着かよ 気持ち悪い
626 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/08(木) 21:03:48.79 .net] レス続けたのは俺じゃないんだがw
627 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/08(木) 21:57:56.36 .net] うわ。まだ居たのかこのキチガイ… まあ放置が一番いいな。俺のこのレスも彼を発狂させる原因になるやもしれんし。
628 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/08(木) 22:15:10.19 .net] まあ反論なく放置される(=俺の勝ち逃げ)という状況ってのが 俺にとっては一番であることには間違いないが で俺がレスしたのは、放置してないからだよ?w
629 名前:604 mailto:sage [2018/03/08(木) 22:33:08.10 .net] >>609 あ、しまった printf '\e' は GNU/Linux じゃないと動かないみたい。 Debian使ってんのがバレてしまったw FreeBSDとかでも動作させる為には printf '\033' とやる必要がある。
630 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/08(木) 22:42:34.38 .net] >>609 出力 A 正常 出力 B 異常 出力 C 正常 の時 それだとACBまたはBACと表示されないか? まぁそれで良ければ良いんだけど
631 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/08(木) 23:32:13.81 .net] ガチでアレな奴が粘着してるな ここまで気持ち悪い奴は滅多に見ない
632 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/08(木) 23:54:18.50 .net] >>556 exec > >(sed -e 's/\(.*\)/^[[32m\1^[[m/') exec 2> >(sed -e 's/\(.*\)/^[[33m\1^[[m/') 後は普通に処理を書けばおk
633 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/09(金) 01:48:35.86 .net] どんだけ答え知りたいんだ あっちのスレいけよこっちはこっちで楽しんでんだから
634 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/09(金) 22:50:21.96 .net] おいおい勘違いするな >>556 はbashやzshでのやり方を聞いてる。 POSIXの範囲でやりたいと言ってる俺ではない
635 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/09(金) 23:00:06.75 .net] そういや>>619 で思い出したけど、 busyboxのsedってなんか動きがおかしいんだよね。 (echo 1; sleep 5; echo 2; sleep 5) | sed 's/a/a/' 例えばこれを実行すると、1が表示されるのは5秒後になる debianだとすぐに表示されるのに。一行遅れて表示される だからsedは今回の俺の用途には使えなくてreadを使ってる
636 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/10(土) 00:28:42.71 .net] >>622 Ubuntu ではおかしいみたいですね。 Debian と openSUSE の busybox では記述通りの動きでした。
637 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/10(土) 01:03:52.34 .net] >>623 WSL上のUbuntuは問題なかった。 busyboxはビルドによって色々変わるだろうけど よく分からんね