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/
400 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 13:29:36.84 .net] >>394 for VAR in ARGS; do command; done
401 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 13:30:47.44 .net] sh -xで実行してみると以下の通り出力されました + PATH=/var/log/ + PATH2=dnsmasq.log + DOT=. + PATH3=/var/log/dnsmasq.log.6 + expr 6 - 1 ./splitLog.sh: 1: ./splitLog.sh: expr: not found + PATH4= + PATH5=/var/log/dnsmasq.log. + mv /var/log/dnsmasq.log. /var/log/dnsmasq.log.6 ./splitLog.sh: 12: ./splitLog.sh: mv: not found (省略) + PATH3=/var/log/dnsmasq.log.1 + expr 1 - 1 ./splitLog.sh: 1: ./splitLog.sh: expr: not found + PATH4= + PATH5=/var/log/dnsmasq.log. + mv /var/log/dnsmasq.log. /var/log/dnsmasq.log.1 ./splitLog.sh: 12: ./splitLog.sh: mv: not found + PATH6=0 + mv /var/log/dnsmasq.log /var/log/dnsmasq.log0 ./splitLog.sh: 17: ./splitLog.sh: mv: not found + exit 0
402 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 13:46:18.65 .net] とりあえず何がしたいかを書け そんな汚いもん見せられても何がしたいのか分かりにくい
403 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 13:51:57.00 .net] PATH潰すんなら外部コマンドはフルパスで書かんと
404 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 14:02:38.34 .net] フルパスで書かないといけなかったんですね…
405 名前:修正してみたらできました、ありがとうございます! [] [ここ壊れてます]
406 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 14:11:58.47 .net] ようわからんがsavelogコマンドみたいなことがしたいのか
407 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 14:27:19.72 .net] PATHがきしょい
408 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 15:33:20.43 .net] >>399 「フルパスで書かなきゃいけない」のではない $PATHを上書きするのがマズい
409 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 15:35:16.21 .net] これ1〜6までファイル全部消えるんじゃね?
410 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 15:35:32.78 .net] 1から6まで
411 名前:400 mailto:sage [2017/10/26(木) 15:37:15.23 .net] あ、すまん勘違い 逆だった
412 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 16:21:22.80 .net] 5を6にリネーム~0を1にリネーム そのあと最新のログを0にリネームじゃないかな どっちにしろゴリ押し感半端ないが
413 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 16:30:18.25 .net] >>402 $PATHって環境変数ですよね… 何故気づかなかったんだろう お恥ずかしい限りです
414 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 16:37:04.75 .net] あーそういうことか、403のお陰でやりたいことは分かった
415 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 18:34:54.50 .net] こうすればわかりやすいですかね #!/bin/sh DIR=/var/log/ FILE=dnsmasq.log; START=0 for i in `seq 1 6` do DEC=`expr $i - 1` cd $DIR mv "${FILE}.${DEC}" "${FILE}.${i}" done cd $DIR mv $FILE "${FILE}.${START}" exit 0
416 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 18:56:39.92 .net] 毎回cdするのは無駄やろ
417 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 19:01:29.48 .net] 個人的にexpr嫌いなのもあって$(())使っちゃうな mv "${FILE}.$((i-1))" "${FILE}.$i" あとseq間違ってね? seq 6 1 -1
418 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 19:25:35.16 .net] これだと全部ログ.0になっちゃいますね ありがとうございます!
419 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/28(土) 17:54:16.26 .net] logrotateの真似したいのかな
420 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/28(土) 19:36:18.05 .net] 素直にそっち使った方が楽に出来るよね
421 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/28(土) 22:25:53.38 .net] そっちを使うほうが楽、ということを学習するにはまずは自分で書いてみて、大変だぜてことを理解しないと
422 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/31(火) 13:10:26.11 .net] 昔solarisで見たlogrotateはshell scriptだった どこかで見れれば参考になるかも
423 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/31(火) 13:39:18.79 .net] あれはあんまりきれいじゃないから参考にしない方がいい
424 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/31(火) 13:48:20.70 .net] この /usr/lib/newsyslog ね www.tcp-ip.or.jp/~ikken/intra/check.txt
425 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/31(火) 15:47:40.56 .net] シェルスクリプト https://www.apt-browse.org/browse/ubuntu/trusty/main/i386/debianutils/4.4/file/usr/bin/savelog マニュアルページ https://manpages.debian.org/jessie/debianutils/savelog.8.ja.html
426 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/02(木) 04:12:26.82 .net] これ? https://goo.gl/En6m3D www.bityet.us/s7b47si.jpg
427 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/03(金) 04:26:36.66 .net] X Windows System で,どの IMF が用いられているか判別する方法を考えている。 思い付いたのは $XMODIFIERS 環境変数を用いた case $XMODIFIERS in   *ibus)     local _imf=ibus     ;;   *fcitx)     local _imf=fcitx     ;;   *uim)     local _imf=uim     ;;   *SCIM)     local _imf=scim     ;; esac なんだけど,$XMODIFIERS が必ず設定されているとは限らないし,なんか漏らしてる気がしてならん……。
428 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/03(金) 04:29:53.86 .net] ツールで投稿したら空白がエラいことになった。すまん。
429 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/03(金) 07:20:14.85 .net] Shell Scriptのコメントアウトに # @(#) Foo is foo. みたいな文字を書いておいて $ what ./foo.sh とやると Foo is foo という表示がでるというようなwhatコマンドがあるらしいのですが 手元のFedora26に見付かりません。($ dnf search what, $ dnf provides what) どこかにありますでしょうか。
430 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/03(金) 08:32:21.55 .net] Linuxの質問はLinux板で
431 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/03(金) 10:09:39.61 .net] >>423 whatはかつて使われていたSCCSというソースコード管理システムに入っていたコマンド 現在はGNU CSSCがSCCSと同等の機能を提供している なのでcsscというパッケージを探す なければhttps://www.gnu.org/software/cssc/へGO!
432 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 15:39:18.57 .net] case文で $1がhogeで、$2がhageの場合のみ処理Aを実行する みたいなのできないでしょうか?
433 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 15:49:53.05 .net] 入れ子にすりゃいい
434 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 15:56:36.27 .net] $1にも$2にも含まれ得ない文字を区切りにして連結
435 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 16:00:08.82 .net] >>425 ありがとうございます。依存地獄に嵌ってしまいあきらめました,教えてもらったのにすいません。 また,御礼がおそくなってもうしわけないです。
436 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 16:22:06.48 .net] caseで実装するなら入れ子かね しかしここでも髪の話するのか
437 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 17:07:40.56 .net] >>427 >>428 >>430 入れ子にできることを全然知らず こんな感じかなでやってみたらいけました 皆さん短時間にありがとうございます >>430 他意はありませんw
438 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/11/20(月) 18:39:46.60 .net] >>430 気にし過ぎだろ さっさと剃れよ
439 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/02(土) 09:15:00.24 .net] すみません、bashでタブ区切りのファイルを配列に取り込む際、空の列が詰めて格納されてしまいます そうならない方法はあるのでしょうか exec < file.tsv while read LINE do ARRAY=(${LINE}) done
440 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/02(土) 10:11:05.91 .net] >>433 変数の参照部分を引用符で囲むとか。 #!/bin/sh - exec < file.tsv while read LINE; do ARRAY=("$LINE") done echo "$ARRAY" IFS の値を空にするとか。 #!/bin/sh - IFS= exec < file.tsv while read LINE; do ARRAY=($LINE) done echo $ARRAY
441 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/02(土) 10:16:16.70 .net] あ,5ch ってコード貼るのまずいんだっけ。しくったな。 まあこんなくだらないコードに著作権云々関係ないかw
442 名前:名無しさん@お腹いっぱい。 [2017/12/02(土) 10:37:47.62 .net] >>433 bash なら mapfile がある(別名 readarray) -t オプションで各行末尾の改行を取除く mapfile -t ARRAY <file.tsv
443 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/03(日) 07:15:44.68 .net] 早速検証してみます、ありがとうございます!
444 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/05(火) 08:37:43.17 .net] 検証した結果、IFSを改行のみにして読み込み、その文字列をCutで抜くで達成できました こうしないと空文字の列が詰まってしまいました IFS_BAK=IFS IFS=$'¥n' exec < file.tsv while read LINE do echo "${LINE}" | cut -f1 >> tmp1.txt echo "${LINE}" | cut -f2 >> tmp2.txt done IFS=IFS_BAK
445 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/05(火) 09:20:20.37 .net] >>438 重箱の隅を突くようで悪いが,その書き方をするならシェバンは #!/usr/bin/bash にしておけ。 $'string' は Bash の独自拡張だった気がする。
446 名前:433 [2017/12/06(水) 10:04:48.53 .net] >>433 今ごろ勘違いに気づいた mapfileじゃ全然見当外れじゃないか…なんかごめん たとえば IFS=$'\t' line="${IFS}b" このとき a=(${line}) で a=("" "b") となるのを期待しているのだけど、実際にはクオートしていないので a=( b) と同じことになって、先頭の「空の列」は残らない かといってクオートしたら a=("${line}") これはタブ区切りで分割されることなく行全体がそのままになるので意味がない… ということだよね >>438 のようにファイルに書き出すだけなら、そう
447 名前:やってcutでやるのが扱いやすそうだけど もしどうしても配列にする必要があるときは、こんな感じでどうだろう https://ideone.com/uPfCwc 空だと消えてしまうなら空にならないよう何か入れとけばいいじゃない(配列にしてから取り除く) という案 [] [ここ壊れてます]
448 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/11(月) 05:34:31.40 .net] >>440 回答が遅れてすみませんでした なるほど…その手はいけるんですね ありがとうございます、活用させていただきます 自分は今回縛りがあってbashだけでやっているのですが、可能なら他のスクリプトに任すべきかな…(´・ω・`)
449 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/14(木) 00:31:41.37 .net] そこは「他のシェルに」じゃないか
450 名前:名無しさん@お腹いっぱい。 [2017/12/29(金) 06:50:06.02 .net] 誰でも簡単にパソコン1台で稼げる方法など 参考までに、 ⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。 グーグル検索⇒『宮本のゴウリエセレレ』 PPEE18BYYA
451 名前:名無しさん@お腹いっぱい。 [2018/01/08(月) 17:53:30.81 .net] はじめまして 早速で申し訳ないのですが、以下のシェルスクリプトでdoを含むコマンドが一切使用できません。理由と解決策を教えてください。 #!/bin/sh dir=`dirname ${0}` echo -n "探す拡張子=" read que ans=$(find ${dir} -name *.${que} | awk -F/ '{print $NF}') if [ -z "${ans}" ];then echo "${que}は見つかりませんでした。\n終了します。" exit else echo "${ans}" fi
452 名前:名無しさん@お腹いっぱい。 [2018/01/08(月) 17:59:26.22 .net] >>444 すみません訂正します。 select文のみどこに書いてもSyntax error: "do" unexpectedというエラー出てしまいます。
453 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/08(月) 18:43:33.26 .net] doが何のこと言ってるのかよくわからんが実行の仕方が間違ってんじゃね まず問題がどこにあるかを明確に切り分けろ
454 名前:名無しさん@お腹いっぱい。 [2018/01/08(月) 20:31:51.74 .net] >>446 さっき書き直したのですが、改善しませんでした。 エラー内容はさっきと同じで、 Syntax error: "do" unexpectedです。 441でも、どこに記述しても変わらなかったため、問題の部分を消して使っていたので、doの部分を貼り忘れてました。すみませんでした。 #!/bin/sh dir=`dirname ${0}` echo -n "検索する拡張子:" read que while [ -z "${que}" ] do #ここのdoは問題なし。 echo -n "拡張子を入力してください。\n検索する拡張子:" read que done ans=$(find ${dir} -name *.${que} | awk -F/ '{print $NF}') if [ -z "${ans}" ];then echo "${que}は見つかりませんでした。\n終了します。" exit else echo "${ans}" fi #============ここから問題の部分=========== select var in ${ans}終了 do if [ ${var} = 終了 ];then exit fi if [ ${que} = gz -o xz];then tar -xf ${dir}${var} fi done
455 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/08(月) 20:59:27.67 .net] xz ]やないの? シンタックスエラーって出てるんだからまず自分を疑おう
456 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/08(月) 21:01:57.76 .net] どこに貼ってもだめならselectの構文がなんかおかしいんじゃないの
457 名前:名無しさん@お腹いっぱい。 [2018/01/08(月) 21:16:18.25 .net] >>448 スペース入れても変わりませんでした。 >>449 構文がおかしい部分を自分では見つけられませんでした。
458 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/08(月) 21:41:13.34 .net] do unexpectedなら直前の「${ans}終了」ちゃうんけ
459 名前:名無しさん@お腹いっぱい。 [2018/01/08(月) 22:01:36.46 .net] >>451 変数じゃなくしても、終了を消しても、別の変数に変えてもSyntax error: "do" unexpectedは消えませんでした。
460 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/08(月) 22:17:55.91 .net] とりあえず「間違いなく動作する」select構文をまず単品で書け ネットのコピペでも構わん。出来る限りシンプルなやつで 動いたならそれを少しずつ改造して動かしてを繰り返しつつお前の目的に近づけろ
461 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/08(月) 22:28:27.56 .net] shでselectってできたっけ
462 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/08(月) 23:44:18.33 .net] SC2039: In
463 名前: POSIX sh, select loops are undefined. bashならとりあえず動く、#!/bin/bash にしとけば [] [ここ壊れてます]
464 名前:名無しさん@お腹いっぱい。 [2018/01/08(月) 23:56:10.56 .net] >>453 ありがとうございます。コピペ&作り直しでできました。 >>454 Ubuntuでやっていたのでできました。 >>455 書き換えました。 皆様ありがとうございました。 もしかしたら似たようなものがすでにあるかもしれませんが、とりあえずできたものを>>454 に貼っておきます。
465 名前:名無しさん@お腹いっぱい。 [2018/01/08(月) 23:57:24.21 .net] #!/bin/bash PS3="入力してください:" menu="曖昧 前方一致 後方一致 完全一致 拡張子" echo "検索するディレクトリを入力してください 入力しなかった場合、このファイルがあるディレクトリを検索します。" while [ -z "${dir}" ] do echo -n "ディレクトリ入力:" read dir if [ -e "${dir}" ];then break else unset dir echo "そのようなディレクトリはありません。" fi done echo "検索方法を選択してください:" >>455 に続く
466 名前:名無しさん@お腹いっぱい。 [2018/01/08(月) 23:58:02.00 .net] >>457 続き select var in ${menu} do echo ["${var}"]で検索します。 echo -n "検索する単語を入力してください:" read que case "${var}" in 曖昧) ans=$(find ${dir} -name *"${que}"*);; 前方一致) ans=$(find ${dir} -name "${que}"*);; 後方一致) ans=$(find ${dir} -name *"${que}");; 完全一致) ans=$(find ${dir} -name "${que}");; 拡張子) ans=$(find ${dir} -name *."${que}");; esac echo "${ans}" exit done
467 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/09(火) 07:32:28.94 .net] 正直見辛いしその程度なら一行コマンド打つんでいらないっす
468 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/09(火) 12:43:53.77 .net] * が展開されてうまく動かなかった
469 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/09(火) 20:01:44.41 .net] Linuxの話ならLinux板で聞いてください
470 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/10(水) 13:12:44.56 .net] odコマンドって規定で行番号は付くは省略するわでほんとUNIX哲学的じゃねーな xxdとかのほうが遥かに扱いやすいわ
471 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/10(水) 16:21:53.96 .net] 行番号ちゃうし
472 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/11(木) 12:57:39.11 .net] od -An -v
473 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/13(土) 15:24:43.34 .net] 規定がっていう話でしょ それと同じで ls も規定で勝手に表示を整えるのをやめてほしい。 Plan 9のlsは規定でls -1みたいな挙動らしいけど。
474 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/13(土) 15:30:27.80 .net] 規定なら従っといた方がいいじゃん 罰則あるかもしれんし
475 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/13(土) 15:31:53.68 .net] それは規約じゃ
476 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/13(土) 19:01:27.06 .net] default = 既定
477 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/13(土) 22:58:37.21 .net] 違反すると罰則あるのは規定じゃなくて規約だろって話
478 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 10:57:30.90 .net] だから「Default=規定」って書いたんじゃねーの? 規約じゃないって意味で。
479 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 11:45:22.78 .net] ワケワカメ
480 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 15:52:04.52 .net] なんだこの流れ 全員頭悪いの?
481 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 16:00:17.68 .net] 流れ?
482 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 16:20:16.87 .net] 全次郎?
483 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 17:49:06.78 .net] 規約じゃなくて規定なら別に従う必要ないって話なだけじゃないのか
484 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 17:50:28.44 .net] default=既定≠規定
485 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 19:12:18.41 .net] >>465 の誤字を>>466 が茶化したのに理解されずにグダグダになった流れ
486 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 19:28:08.33 .net] すまん誤字に全く気付かなかった
487 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/14(日) 19:34:54.90 .net] あーなるほどそういうことか。 普通に「既定」に脳内変換してたせいで意味不明な喧嘩に見えてたわ
488 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/15(月) 00:06:01.79 .net] 脳内変換てw馬鹿なだけやんかw
489 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/15(月) 08:02:47.35 .net] すぐそうやって火種を撒く……
490 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/15(月) 22:28:34.05 .net] $'\n' こういう $'何か' っていう書き方って bash 限定? sh でもいける?
491 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/16(火) 12:48:12.73 .net] bash限定
492 名前:名無しさん@お腹いっぱい。 mailto:age [2018/01/16(火) 15:07:55.74 .net] POSIX xargs pubs.opengroup.org/onlinepubs/9699919799/utilities/xargs.html には-0オプションがありませんが,どうにかしてxargsにナル文字区切りのデータを渡せませんかね。 もしくは xargs -0 がエラーになるOSをご存知でしたら教えて下
493 名前:さい。 FreeBSD, MacOS, Debian GNU/Linuxともにxargsに-0オプションはありました。 [] [ここ壊れてます]
494 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/16(火) 16:09:39.07 .net] Solarisとかあやしそうだね
495 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/17(水) 00:51:10.26 .net] >>485 そうみたいね https://unix.stackexchange.com/questions/67193/solaris-xargs-command-for-solaris https://docs.oracle.com/cd/E19253-01/819-1210/6n3j74k03/index.html
496 名前:481 mailto:sage [2018/01/17(水) 04:46:35.14 .net] >>485 >>486 ありがとうございます。 ファイルパスに関するシェルスクリプトを作ろうとしており, ファイル名に改行文字が含まれている場合を考慮してナル文字区切りでデータを扱いたかったのです。 が,もうそんな特殊なファイル名にしている側の責任ってことにします。 仕事だったらもうちょっと考えるところですが個人で扱うので自分が気をつければいいだけなんで。 リンク等ありがとうございました。
497 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/17(水) 08:37:13.99 .net] pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html POSIXのfindには+終端もあるみたいだから、 用途によってはxargsを使わずに変なファイル名が扱えることもある。 例によってSolarisにはないが、POSIXに準拠してないということで切れる。
498 名前:481 mailto:sage [2018/01/17(水) 09:45:47.24 .net] >>488 ありがとうございます。 > 例によってSolarisにはないが、POSIXに準拠してないということで切れる。 恥かしながらSolaisってPOSIX準拠を謳っていないことを今知りました…… よくシステムコールAPIの説明で「SolaisまたはPOSIX」とありますが, その真意をようやく掴めました。 --- awkのRSにナル文字を指定できればxargsの代替として使えるかもしれないと思ったんですが, $ printf '%s\0%s\0%s' 'First' 'Second' 'Third' | awk -v RS="$(printf '\0')" '{ print $0 }' みたいなことをやっても撥ねられる (シェルがナル文字についての警告を出して,「FirstSecondThird」とだけ表示される) のでやっぱりナル区切りを扱うのはやめておこうと思いました。 大人しく空白区切り・改行レコードで行きます。
499 名前:481 mailto:sage [2018/01/17(水) 09:55:31.15 .net] なんかこうすると上手く行った (ように見えます)。 $ printf '%s\0%s\0%s' 'First' 'Second' 'Third' | \ awk ' \ BEGIN { RS="\0" ORS="\n" } { print } \ ' なんでこれが良くて >>489 がだめなのか分からないのが怖いので結局ナル文字区切りはやめることにしました。 連投&スレ汚し失礼しました。
500 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/18(木) 11:41:43.86 .net] sedでiフラグをdフラグと一緒に使うことはできないのでしょうか。
501 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/18(木) 11:44:10.00 .net] ↓ sed mevius.2ch.net/test/read.cgi/unix/1085730992/
502 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/18(木) 19:40:41.47 .net] >>492 誘導ありがとうございます。一応の解決を見ました。
503 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/26(金) 00:50:46.41 .net] hoge.sh <(cat hoge.txt fuga.txt piyo.txt) ### hoge.sh #!/bin/bash wc -l $1 # 正しい行数 wc -l $1 # なぜか0 おせーてエロいひと
504 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/26(金) 06:57:46.46 .net] >>494 つ cat hoge.txt fuga.txt piyo.txt | (wc -l; wc -l)
505 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/01(木) 22:35:58.02 .net] こういうhoge.shがあったとして ``` #!/bin/bash set -x for x in aa bb cc; do echo $x done ``` 実行するとこうなる ``` $ bash hoge.sh + for x in aa bb cc + echo aa aa + for x in aa bb cc + echo bb bb + for x in aa bb cc + echo cc cc ``` けどこうしたい(forやifが出力されないようにしたい) ``` $ bash hoge.sh + echo aa aa + echo bb bb + echo cc cc ``` どうしたらいい?
506 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/01(木) 22:38:33.65 .net] つづき。ためしにこうしてみた ``` #!/bin/bash for x in aa bb cc; do set -x echo $x set +x done ``` 実行したら set +x も表示された(これは
507 名前:いらない) ``` $ bash hoge.sh + echo aa aa + set +x + echo bb bb + set +x + echo cc cc + set +x ``` [] [ここ壊れてます]
508 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/01(木) 22:40:28.83 .net] grep -vでもしたら
509 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/01(木) 23:21:30.45 .net] echo $x の前に echo + echo $x と記述する
510 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/01(木) 23:48:49.07 .net] bashだからじゃね?
511 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/02(金) 01:26:01.46 .net] fishてどう?
512 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/02(金) 01:47:58.90 .net] $ cat hoge.sh #!/bin/bash for x in aa bb cc; do (set -x echo $x) done $ bash hoge.sh + echo aa aa + echo bb bb + echo cc cc なんつって
513 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/02(金) 08:54:06.42 .net] >>502 > (set -x > echo $x) この方法でできました。ありがとうございます。 もっと簡潔に書けるといいのだけど。
514 名前:名無しさん@お腹いっぱい。 [2018/02/08(木) 16:21:59.61 .net] すんませんけど 今割り当て端末数からこんな感じでサブネットマスクを出すのを作ったんですけど i=256;j=0 ; while [ ! $i -eq 1 ] ; do i=$(( $i /2 ));echo $i; j=$(($j + 1)) ; done ;echo ans:$((32 - $j)) もっとてっとり早く出すコマンドはありませんか? できれば256を入れたら8とかさっさと返してくれるような奴を あとよくわからんけど 計算で256と2を入力したら後ろの8とかを出すコマンドはないですか? 覚えるとか調べるは嫌いなんで、なるべく手間のかからないものを教えてください
515 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/08(木) 17:19:18.65 .net] サブネットマスクぐらい暗記か手計算しろよ
516 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/08(木) 18:06:11.03 .net] >覚えるとか調べるは嫌いなんで、 生きてる意味あんのか、これで?
517 名前:名無しさん@お腹いっぱい。 [2018/02/08(木) 19:05:19.51 .net] >>505 手間がかかるから面倒だよ 20万以上やるし ああ これででるのね うしろに変なゴミが付いてるがどうでもいいか :echo " l(65556)/l(2)" | bc -l 16.00044020841915062248 :echo " l(1024)/l(2)" | bc -l 10.00000000000000000010 >>506 また努力するするのが誇らしいとか思ってる馬鹿?ww 俺が考えるならこの機械とか利用価値はないよ ゲーム開発のUNITYのスレに行けば似たような奴が沢山いるよ まぁしばらくはマシーンを買う金がないからlinuxとイヤイヤ付き合うしかないが ほんと手間がかかるな
518 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/08(木) 19:20:30.57 .net] ある意味面白いやつだな
519 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/08(木) 20:11:48.67 .net] >また努力するするのが誇らしいとか思ってる馬鹿?ww こんなこと考えたこともないけど 思い込みが激しいっていうか頭腐ってるだろ ああ死んでるんだったっけ
520 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/08(木) 20:31:31.63 .net] 落ち着け
521 名前:名無しさん@お腹いっぱい。 [2018/02/08(木) 20:57:59.75 .net] >>509 そういう手間が掛かるのはちょっと… 利用価値がないし
522 名前:名無しさん@お腹いっぱい。 [2018/02/08(木) 21:47:56.46 .net] バイト雇って計算してもらいましょう
523 名前:名無しさん@お腹いっぱい。 [2018/02/08(木) 23:17:47.05 .net] >>512 俺自体が無職だよ さて間抜けからビットコインを盗まんと
524 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/09(金) 01:51:26.42 .net] >>513 頼むわ 間抜けは存在自体がガンだから
525 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/09(金) 09:19:26.94 .net] 犯罪の予告と教唆かよ
526 名前:名無しさん@お腹いっぱい。 [2018/02/09(金) 22:09:51.06 .net] >>515 予告と教唆じゃなくて実行中だよ とろくさいやつだなw or2.mobi/index.php?mode=image&file=193749.jpg or2.mobi/index.php?mode=image&file=193750.jpg 3週間たってだいぶリナックスにも慣れてきた ある程度稼がせてもらったらウインドウズに戻るよ ライブは少し使いにくい
527 名前:名無しさん@お腹いっぱい。 [2018/02/09(金) 22:12:54.21 .net] なんかシェルスクリプト総合とか書いてあったから来てみたけど しょぼそうな連中しか居ないけど… ここのひとってシステム管理とかで食ってる連中が多いの?
528 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/09(金) 22:39:19.88 .net] 煽ったらなんかもらえるのか?
529 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/09(金) 22:54:21.43 .net] なんか急に変なの出てきたな どっかにスレのアドレスでも貼られたのか
530 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/10(土) 00:05:29.76 .net] いや元々お前らの方がずっと変だけどw
531 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/10(土) 05:51:23.70 .net] 変と思いながら見続けて今さあながら「変だ!変だ!」と言う人って・・・ まあ相手にされるかは別にして居たいなら居ていいと思うよ
532 名前:名無しさん@お腹いっぱい。 [2018/02/10(土) 11:31:48.71 .net] >>517 面白いネタがあれば食いつくんじゃない? つまらんネタしか無いから過疎ってる。
533 名前:名無しさん@お腹いっぱい。 [2018/02/10(土) 19:55:51.78 .net] ほんとに揃いも揃っておまえらは無能な連中だよ こんな能無し共が良いかねを取って裕福な生活をしてるのに 何で俺がしこしこビットコインを盗まんとならんのか…… よしよしw 今日はあがりはデカそうだな
534 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/15(木) 20:16:20.69 .net] 1111 2222 3333 という内容のファイルに対して, • 3333 が見付かれば 3333 を, • 見付からなければ 2222 を • ⋮ という操作を施したいです。そして,これをパイプに繋ぎたいです。 私が考えたのは↓のスクリプトですが, for q in 3333 2222 1111; do cat <<-'EOF' | 1111 2222 3333 EOF grep $q && break done 難点があります。 1. パイプでファイルを渡せない。 2. 順番に依存している (実際のファイルでは 3333 が最後にくるとは限らない) どうか助言願います
535 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/15(木) 20:19:41.66 .net] あ,すいません。期待する動作は, かりに理想のスクリプトを idea.sh として, $ cat ./org.txt 2222 3333 1111 $ cat ./org.txt | idea.sh 3333 $ cat ./org.txt | sed -e '/3333/d' | idea.sh 2222 $ cat ./org.txt | sed -e '/3333/d' -e '/2222/d' | idea.sh 1111 という感じです。
536 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/15(木) 21:01:11.15 .net] 標準入力を受け取れるように作ればいいんじゃないの? idea.sh sed -e "/$1/d" < /dev/stdin $ cat ./org.txt | ./idea.sh ‘3333’ | ./idea.sh ‘2222’ | ./idea.sh ‘1111’
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はビルドによって色々変わるだろうけど よく分からんね
638 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/10(土) 01:06:54.08 .net] > openSUSE の busybox では記述通りの動きでした。 もしかして、sedはbusyboxじゃない方のsedになってない? WSL上のUbuntuに入れたbusyboxのsed ↓つまりこれを実行するとやっぱり5秒後に1と表示される (echo 1; sleep 5; echo 2; sleep 5) | busybox sed 's/a/a/' やっぱりbusyboxが実装してる簡易版sedの問題な気がする
639 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/10(土) 01:08:10.50 .net] まあもともとbusyboxってそういうものだし とりわけ騒いだりはしないけどさ
640 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/10(土) 02:15:25.24 .net] >>625 >>623 は busybox ash でシェルを起動して確認しています。 busybox sed 's/a/a/' にすると Debian も openSUSE も Ubuntu と同じ動作になりました。
641 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/10(土) 09:07:03.16 .net] おーほんとだ。Busybox v1.22.1 on Debianでも同じような動きになる。 ここまでハッキリしたバグに遭遇したの久し振りだわ 単に離れてただけかもしれんが
642 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/10(土) 09:38:16.90 .net] なにやら興味がある人がいるようでw なんで俺の用途で使えないかというと、例えばこんな感じに ユーザーのインタラクティブな入力を変換して出力したいから ↓ >(実際には画面に表示されない) の行がユーザーの入力 $ sh | sed 's/a/a/' > echo 1 > echo 2 1 > echo 3 2 見ての通りユーザーが入力したコマンドの結果が一つ遅れて表示される sedのよくあるユースケースでは問題ないんだろうけどね
643 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/10(土) 12:15:21.67 .net] >>629 挙動が変わるツールは珍しいなと思いました。 busybox ash の中で sh | sed 's/a/a/' とすると、 Debian (v1.22.1) まとも Ubuntu (v1.22.1) 遅れる openSUSE (v1.21.1) まとも(sh プロンプトが表示される) CentOS (v1.15.1) まとも(sh プロンプトが表示される) Windows (v1.29.0) 遅れる でした。 ビルド時に引いているライブラリの差異なのでしょうか...
644 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/10(土) 12:28:15.59 .net] バッファリングが影響してそうなのかもしれないけど 正規表現の実装の都合な気もする。 はたまたカーネル
645 名前:ェ関係してるのかシェルの設定でなんかあるのか 正直、そういう違いが有るんだね。気をつけておくよと 事実を受け止めるぐらいでで深追いする気力はないw 話変わるけど、何もしない関数の定義、 foo() : もしくは、echoするだけの関数の定義 foo(): echo foo この書き方ってPOSIX準拠だよね? bashやzshではエラーになった [] [ここ壊れてます]
646 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/10(土) 15:57:33.44 .net] >>631 foo() echo foo ならzshは理解するぞ Bourne shell系はfoo() any-compound-commandだけ理解して foo() any-commandは理解しない
647 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/10(土) 18:45:48.71 .net] >>631 POSIX準拠なのかはよくわかりませんが、sh ならば foo() foo1() echo "$1" で、sh でも bash でも動かすなら foo() { :; } foo1() { echo "$1"; } でいけると思います。
648 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/10(土) 23:10:12.04 .net] 訂正 × foo(): echo foo ○ foo() echo foo >>632 ごめん、zshでは試していなかった。 今zsh入れてたマシン壊れてるんだったw 別の環境にzsh入れたらたしかに動いたね dash、ash、zsh では動いた bashだけ動かなかった
649 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/10(土) 23:17:51.17 .net] func() : ↑これ確かにシェバンを #! /bin/sh にすると通るけど #! /usr/bin/env bash にすると撥ねられるな。 pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_05 一応現行POSIXのシェル関数の定義はここに書いてあるけど、func() : は恐らく適合してるな。 多分bashの文法チェックが少しばかりおせっかいすぎるんだろう。 でもPOSIXに準拠した記法なのにエラーになるって嫌だなぁ
650 名前:632 mailto:sage [2018/03/10(土) 23:21:43.98 .net] あれ。yashでも「syntax error: a function body must be a compound command」って撥ねられるわ。 yashはかなり厳密にPOSIXに従ってる筈なんだけど…
651 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/11(日) 00:25:29.87 .net] またちょうどよくシバンの話がw シェルスクリプトのファイルを直接実行するのではなく ライブラリとして他のスクリプトから読み込むだけの場合 シバンいらないよね? またその場合の拡張子ってどうしてる? シンタックスハイライトとか自動で適用させたいんだけど 余計なものはできるだけ排除したい
652 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/11(日) 00:28:14.22 .net] >>635 そうなんだよね。あと > fname ( ) compound-command [io-redirect ...] ここにio-redirectが書けたのがびっくり どういう時に使えば良いんだろうか?
653 名前:632 mailto:sage [2018/03/11(日) 01:05:34.01 .net] >>638 俺は未インストールコマンドの処理に使ってる check_command() { type "$1" > /dev/null 2>&1 || { printf '%s%s\n' \ "$1" 'をインストールして下さい。' exit 1 } >&2 return $? } check_command "curl" こうするとエラーメッセージが標準出力に出ないからパイプ繋いでてもおかしなことになりにくい。 もっとも |& ←みたいなパイプなら無理だけど、そもそも標準エラー出力ごとパイプに使うなんて稀だろうという推測。
654 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/11(日) 01:46:36.03 .net] >>639 いや、そうではなくて関数定義の最後に書けるんだなーって話 その例で言えば、こういう書き方ってこと (関数全体を別の所に出力したいときには便利か、うーん使うかな?) check_command() { type "$1" > /dev/null 2>&1 || { printf '%sをインストールして下さい。\n' "$1" exit 1 } } >&2 # ついでにどうでもいい所を俺の趣味で変更したw # exitもreturnに変えたい。もしくはexit_if_command_not_foundみたいな関数名にしたい > もっとも |& ←みたいなパイプなら無理だけど、そもそも標準エラー出力ごとパイプに使うなんて稀だろうという推測。 /dev/ttyに出力するって手もあるよ $ (echo stdout-a; echo stderr-a >&2; echo tty-a >/dev/tty) |& sed 's/a/b/' tty-a stdout-b stderr-b
655 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/11(日) 02:00:39.65 .net] >>636 yash覚えた 最低限機能しかももってないと思われるashで動けば Bourne Shell 系全部でうごくだろうと思っていたから そういうこともあるんだなーって思った
656 名前:632 mailto:sage [2018/03/11(日) 02:47:31.38 .net] >>640 あ,そういうことか。勘違いしてたわw それはちょっと使い道思い付かん ところで, return $? ↑これ消した理由なに? C言語をやってるせいか関数が終了ステータスを返さないと不安で仕方無いんだけども, シェルスクリプトだと要らないのかな。今まで特にreturn行のせいで不具合が発生したこともなかったけれど。
657 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/11(日) 11:42:23.58 .net] >>642 何も書いてなければ、その時点の$?がそのまま返るだろ? > C言語をやってるせいか関数が終了ステータスを返さないと不安で仕方無いんだけども, Ruby(最後に評価された値を返す)やってるとreturnなんて書かないんだがw
658 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/11(日) 11:44:13.17 .net] > 今まで特にreturn行のせいで不具合が発生したこともなかったけれど。 まあ不具合は発生しないだろうね。 関数の最後でなにもしないなら、その時点の $? が返る所を $?を取り出してreturnの引数で$?を返すようにしただけだからw
659 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/11(日) 13:19:13.21 .net] Cとか化石みたいな言語使ってる人って無駄が多いよね 生産性悪w
660 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/11(日) 13:41:26.14 .net] そういうこと言う奴って大体Cが出来ないコンプレックス抱えてるんだよなぁ
661 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/11(日) 13:44:23.08 .net] Cから学べること多いのになぁ
662 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/11(日) 13:59:18.74 .net] Cはハードに近いところを表現するのに適してるから絶対に無くならないけどね。 化石だけど生活には欠かせない燃料みたいなもんかな。 Cで書かれてるシェルのスレで否定しちゃうのはちょっと痛いね。
663 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/11(日) 14:52:52.42 .net] 俺はCを否定してないぞ。C以外を使っていれば returnしなくていい言語だってあることを知るだろうし、 returnを書くことに拘る必要はないってことだ
664 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/11(日) 16:03:25.28 .net] >>643 ruby使ってたってreturn書くことあるだろ implicitとexplicitを状況に応じて使い分けることが大事
665 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/11(日) 16:26:06.07 .net] 山月記ってアニメ化されないの?
666 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/11(日) 16:39:38.95 .net] >>650 ルビ厨の相手するなよ
667 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/11(日) 17:07:11.55 .net] >>652 Cに対するコンプレックス同様 Rubyに対するコンプレックスも見苦しい
668 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/11(日) 22:37:37.82 .net] >>650 returnを省略できる場合に、returnを書くことはないよ
669 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/12(月) 09:24:03.09 .net] 話をぶった切ってすまんが、なるべく依存関係が少ない・かつインタラクティブがある程度機能的なPOSIX互換シェルって何があるかな。 ksh98とかyashとかは使ったことあるけど、ああいう感じでもうちょい開発が盛んなやつとか知らない?
670 名前:名無しさん@お腹いっぱい。 [2018/03/12(月) 17:35:16.53 .net] 連続足し算だけど #!/bin/bash while true do add=expr 0 read x add=$(($add + $x)) echo '----------' echo ' ' $add done でできるが line 5: 0: command not found 1 ---------- 1 ./tasizan-renzoku.bat: line 5: 0: command not found 2 ---------- 3 ./tasizan-renzoku.bat: line 5: 0: command not found と 気色悪い。 どうすれば正解なの?
671 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/12(月) 17:39:55.92 .net] expr 0が何も囲われてないが大丈夫か
672 名前:名無しさん@お腹いっぱい。 [2018/03/12(月) 17:48:20.94 .net] すごいね、以下でエラーがなくなった。 #!/bin/bash while true do add=(expr 0) read x add=$(($add + $x)) echo '----------' echo ' ' $add done
673 名前:名無しさん@お腹いっぱい。 [2018/03/12(月) 17:49:39.62 .net] エラーがなくなった が 足し算の合計もなくなった
674 名前:名無しさん@お腹いっぱい。 [2018/03/12(月) 17:58:34.26 .net] a=0 while read x; do a=$((a + x)) echo ---------- echo ' ' $a done
675 名前:名無しさん@お腹いっぱい。 [2018/03/12(月) 18:02:05.44 .net] ありがとう。 合計を外側で定義することがわからなかった。 こうなると
676 名前:d卓より便利! [] [ここ壊れてます]
677 名前:名無しさん@お腹いっぱい。 [2018/03/12(月) 22:12:41.08 .net] 【大統領】 Japは我々の家畜 <大イスラエル帝国> 安楽に暮らせる奴隷 【議定書】 rosie.5ch.net/test/read.cgi/liveplus/1520856333/l50
678 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/12(月) 23:38:42.01 .net] また頭がおかしいのがわいてきた UNIX板荒らさないでほしい
679 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/13(火) 00:08:45.00 .net] コマンドにローマ字で名前付けるやつは多かれ少なかれキチ成分が入ってる (経験からくる偏見)
680 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/15(木) 11:45:55.61 .net] >>654 書いといた方がデバッグが楽だぞ
681 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/15(木) 22:29:00.04 .net] >>665 あんまりそう思ったことないな
682 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/17(土) 03:48:34.81 .net] for i in `seq -f %02g 1 10` do echo ${i} done このfor文の中で01の時に1、02の時に2を指定する方法ってありませんか? 簡潔に言うと先頭の0を取ったものを使いたいです
683 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/17(土) 08:33:32.12 .net] >>665 どうしてデバッグが楽なのか知らんが、 少なくともprintfデバッグすると 終了コードが0に変わるからデバッグしづらいな
684 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/17(土) 08:52:03.87 .net] >>667 2桁と決まっているなら echo "${i##0}" 逆にしてこっちのほうが楽だと思うが for i in $(seq 1 10) do printf "%02d\n" $i done
685 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/17(土) 08:52:41.56 .net] 訂正 printf '%02d\n' "$i"
686 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/17(土) 20:01:50.50 .net] 拡張POSIX準拠らしいけど echo {1..10} {01..10} arch linuxだと普通のshでも展開してくれる
687 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/17(土) 20:09:04.24 .net] ありがとうございます
688 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/17(土) 21:41:11.21 .net] どういたしまして
689 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/17(土) 22:02:49.28 .net] >>671 > arch linuxだと普通のshでも展開してくれる してくれなかったぞ
690 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/17(土) 23:05:13.47 .net] > 拡張POSIX準拠らしいけど 拡張POSIXってしう仕様があるの? POSIXを拡張したもので、POSIX非準拠って意味だと思ってたんだけど?
691 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/18(日) 00:55:12.66 .net] シェルスクリプトってさ、POSIXが標準だけど 実質bashがデファクトスタンダードって考えて良いのかな? zshやfishを使っていてもbashはインストールされていると考えていい? いや、あるコマンド作ろうと思ってるんだけど、 基本はPOSIXで動くようにするけど、bashがインストールされていれば 拡張機能が使えるようになる。という仕組みは ほぼすべての人が拡張機能使えると考えて良いんだろうかなって思って
692 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/18(日) 01:08:34.19 .net] >>676 bash前提はだめ。 BSD系にはデフォルトで入っていないし、後から入れてもパスが違う。
693 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/18(日) 01:10:24.11 .net] >>674 ごめん /bin/shのバージョン確認してみたら GNU bash, バージョン 4.4.19だった
694 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/18(日) 01:15:31.51 .net] >>677 いやbash前提じゃないんだ。POSIX シェル前提。POSIX シェルだけで動く。 だけどbashがインストールされていれば拡張機能が使える その拡張機能っていうのも、本質的な機能じゃなくて なんていうかな、同じコマンドで実行結果も同じだけど情報が詳細に取れるって感じ BSD系といってもMacはデフォルトでbashになったのは知ってる。 パスに関してはシバンではなくbashコマンド経由で実行すれば良いと思ってる (切替可能なようにするのでどっちみちシバンには頼らないと思うし)
695 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/18(日) 01:16:39.04 .net] >>678 うん、たしかCentOS系はbashへのシンボリックリンクになってたはず Debian系はdashなので拡張POISXは使えない
696 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/18(日) 09:35:45.26 .net] POSIX規定外のことをPOSIX拡張って書くのは誤解のもとだからやめた方がいい。 伝統的にシェルにはなくてPOSIXで増えた機能のことをPOSIX拡張とよぶことがあるので、意味が真逆。
697 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/18(日) 09:54:45.87 .net] 可搬性を考えるとPOSIX準拠で書く癖をつけた方が 自分のためになるなあ
698 名前:名無しさん@お腹いっぱい。 [2018/03/18(日) 12:02:31.33 .net] ★★★The● best way to eliminate too much gap between rich and poor, is to decide the tax● rate of the progressive tax in the referendum(Root Tax).★★★ この掲示板(万有サロン)に優●秀な書き込みをして、総額148万円の賞金をゲットしよう!(*^^)v ● jbbs.livedoor.jp/study/3729/ →リンクが不良なら、検索窓に入●れる!
699 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/18(日) 14:34:15.18 .net] POSIX準拠で書くのは結構つらいので デファクトスタンダードであるbash機能のみで書くといいよ
700 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/18(日) 14:55:14.07 .net] >>679 いっその事 ps -p $$ -o comm= でシェルを見て処理を分けるとか
701 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/18(日) 15:53:34.91 .net] >>685 見分け方は本質的なところじゃないんで 俺にとってはどうでもいい話だけど、 シェルの判定ではなくて機能チェックで見分けるよ ブラウザをUserAgentで判定するのではなく 使いたい機能が使えるかどうかで判定するのと似たようなやり方ね > ps -p $$ -o comm= ちなみにそれcygwinではエラーになった
702 名前:682 mailto:sage [2018/03/18(日) 22:58:03.92 .net] >>686 bash や zsh の機能を多く使うならば、その都度機能が動くかどうか判定するより、 起動シェルを見て分岐したほうが手間がないという意味合いで書きました。 cygwin の ps は -o オプションは無いのですね。失礼しました。 freebsd の環境で hoge.sh に ps -p $$ -o comm= と書いて、 /usr/local/bin/bash ./hoge.sh とすると、bash と表示されます。 (debian とかの ps でも ok) cygwin の /bin/sh は /bin/bash なのでシェルを見るよりその都度使用する機能を判定するほうがよさそうですね。
703 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/19(月) 06:19:05.05 .net] > > ps -p $$ -o comm= > ちなみにそれcygwinではエラーになった マジで!? POSIXでも定義されてるんだけどなぁ
704 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/19(月) 14:02:30.98 .net] 壊れた動画探しに ffmpeg -i input -f null /dev/null 2>&1 | grep -m 1 -Ii error ffmpeg -i input -f null /dev/null 2>&1 | grep -q -i error とやったのですけれど、grepにヒットしてもffmpegの動画読み込みが止まりません。 grepにヒットしたらffmpegを止めるにはどうすればいいのか。 いいアイデアはないですか。
705 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/19(月) 14:45:03.71 .net] この手が使えるのではないか https://stackoverflow.com/questions/7178888/grep-q-not-exiting-with-tail-f
706 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/19(月) 14:52:10.70 .net] ffmpeg -xerror は使えないんだっけ ‘-xerror (global)’ Stop and exit on error
707 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/20(火) 00:41:07.30 .net] bashがどうしても使えない化石サーバは廃品回収へ
708 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/20(火) 01:44:18.89 .net] 新Mac板から来ました。 カレントディレクトリ内にaacファイルがあれば、mediainfoでHE-AACかLC-AACか調査して、 l-smash muxerを使ってHE-AACとLC-AACでは別のコマンドにてm4aに詰め込みたいです。 以下のままだと、aacが無い場合は ----- aacファイルはありません. ----- iTunes MP4 muxing mode ./test.sh: 3 行: 27777 Segmentation fault: 11 muxer -i $file 〜 と表示されてしまいます。 AACファイルがない場合はmuxerのコマンドに進まないようにするにはどう書くといいん
709 名前:でしょうか? 続く [] [ここ壊れてます]
710 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/20(火) 01:44:57.18 .net] 続き #!/usr/bin/env bash for file in *.aac; do if [ -e $file ] ; then # aacファイルが存在する場合 mediainfo $file | grep '^Format profile *: LC$' >/dev/null 2>&1 #es=$? else echo "-----" # aacファイルが存在しない場合 echo "aacファイルはありません." fi #------------------------------------ # HE-AACだった場合 if [ $? = 1 ] ; then echo "-----" muxer -i $file?sbr --file-format m4a -o ${file%.aac}.m4a fi #------------------------------------ #AACの場合 if [ $? = 0 ] ; then echo "-----" muxer -i $file --file-format m4a -o ${file%.aac}.m4a fi # .aacで終わるファイル名だけど、HEでもLEでもどちらでも無い場合はどうやるんだろうか done
711 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/20(火) 06:10:19.91 .net] $1は本当に直前に実行したのコマンドのステータスしか入らないから注意 ifで比較する前にecho $1で何が入ってるか確かめてごらん それをふまえて論理構造組み直しな
712 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/20(火) 08:25:32.50 .net] 「AACの場合」の前後の fi と if ... の2行を else に置き換えた上で、mediainfo コマンドの直後に 「HE-AAC だった場合」以降の if/else 文を移動、ではだめかな。 $? はすぐに別のコマンドの結果を格納してしまうので、 . mediainfo ... . MEDIAINFO_RET=$? . ... . if [ $MEDIAINFO_RET = 0 ] ; then ... みたいにコマンド実行直後に別の変数に回収してみるといいかもね。
713 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/20(火) 10:06:24.97 .net] >>690 ,>>692 ありがとう 早速試してみる
714 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/20(火) 11:43:54.77 .net] >>695 >>696 どうもありがとうございます 試してみます ググっていたら、同じようにエラーが出る人がいて、testの[]を二重のカッコ[[]]にしてるようでした 今見返したら、es=$?でやってみようと思ってたのに途中になってたっぽいです
715 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/20(火) 12:10:20.27 .net] for文脱出したいだけならbreak
716 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/21(水) 02:19:38.65 .net] >>695 >>696 うまくいきました。 どうもありがとうございます。 >>699 書き換え前のスクリプトで試しましたが、こちらもエラーが出ませんでした。 どうもありがとうございます。 オライリーの入門bashには、ループの終了にbreakを使うのは良くないと書いてありました。 それはなぜでしょうか?
717 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/21(水) 02:54:50.71 .net] >>700 今回みたいなエラー処理の場合はexitした方が良いかもね
718 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/21(水) 09:34:02.98 .net] >>701 なるほどです
719 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/21(水) 23:13:42.44 .net] >>693 >>694 >>696 上の場合はmediainfoの終了ステイタスで判断して次にさらにif〜と進んでいるんですが、 LCかHE-AACかそのどっちでも無いかをcace〜muxer〜っとやるほうが確実なのかなと思いました。 その場合、 mediainfo $FILE | grep -E '^Format profile *: LC$|^Format profile *: HE-AAC / LC$' で出てきた文字列をcaseに渡したいんですが、 case HOGE in "*: LC" ) muxer〜;; "*: HE-AAC / LC" ) muxer〜;; * ) "AACではない";; ecase だった場合、HOGEにはどう書けばいいんでしょうか?
720 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/22(木) 00:30:54.25 .net] >>703 HOGE=$(mediainfo $FILE | grep -E '^Format profile' | sed -E 's/.*: (.*)/\1/‘) mediainfoの出力をgrepでFormat profileの行だけに絞って それをsedで必要な箇所だけ置換して変数に入れてる 円マークはバックスラッシュに変換してね
721 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/22(木) 00:40:17.02 .net] sedじゃなくbashのstring manipulationを使いたければ HOGE=$(mediainfo “$FILE” | grep -E '^Format profile') case ${HOGE##*:} in … ${HOGE##*:} はHOGE内の文字列を先頭から”:”まで最長一致で取り除く
722 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/22(木) 00:59:34.53 .net] 自己レス HOGE=`mediainfo $FILE | grep -E '^Format profile *: LC$|^Format profile *: HE-AAC / LC$'` case $HOGE in これで大丈夫
723 名前:サうですね [] [ここ壊れてます]
724 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/22(木) 01:02:19.80 .net] >>704 >>705 どうもありがとうございます 今触れないので、あとでやってみます!
725 名前:700 mailto:sage [2018/03/22(木) 01:05:43.95 .net] >>703 >>706 >>707 の3つは私です
726 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/22(木) 01:26:33.69 .net] 文字列を1文字ずつ処理するってどうやれば良いのかな?
727 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/22(木) 01:26:58.52 .net] なるべく速い方法で
728 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/22(木) 01:40:38.44 .net] 先頭の一文字を削除するっていうのはできるんだけどなぁ。 一文字削除したらな、その削除した一文字を取りたいものだ あ、POSIXの話ね
729 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/22(木) 01:43:14.01 .net] あ、これでいけるのか str=abcdefg last=${a##?} echo ${str%%$last}
730 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/22(木) 01:43:57.68 .net] exprが柔軟かな
731 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/22(木) 02:17:21.19 .net] grep -o .
732 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/22(木) 02:28:14.30 .net] >>709 速いかどうか分からんけど awk でやるなら printf 'Hello\nWorld\n' | awk -F '' '{for(i=1;i<=NF;i++) print $i}' とかかなぁ。grep -Eo '.' ってのもあるけど for c in $(printf 'Hello\nWorld\n' | grep -Eo '.') do echo "$c" done あとは fold コマンドとかで。 printf 'Hello\nWorld\n' | fold -w1
733 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/22(木) 02:37:08.12 .net] 間違えてた str=abcdefg last=${str##?} echo ${str%%$last}
734 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/22(木) 02:39:35.06 .net] >>715 後出しだけど、意外と改行まで1文字として扱うのは大変なんだよね
735 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/22(木) 02:48:27.27 .net] 改行を扱いたい場合は bash か zsh の read かな。 printf 'Hello\nWorld\n' | while read -r -n 1 c;do echo "$c"; done awk の場合は RS に '\0' をセットすればいいかも printf 'Hello\nWorld\n' | awk -vRS='\0' -F '' '{for(i=1;i<=NF;i++) print $i}'
736 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/24(土) 18:09:58.40 .net] 公開するようなシェルスクリプトって--helpオプションくらいは付けたほうがいいかな。 問答無用で第一引数をファイル名やらURLやらだと解釈するほうがはるかに楽だし簡潔になるんだけども。
737 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/24(土) 18:17:47.94 .net] オプションで思い出した。 オプションの解析めんどくせーとか思って他の言語のライブラリを参考に オプション解析のライブラリを作ろうかと思ってるんだが、 getoptやgetopts程度だと使いやすくなった気がしないし、 作った所でそんなに簡単に書けるようなもんでもなさそうで、 何のためにコレが必要なんだ?って思いなした結果 他言語にあるようなライブラリは、--helpを半自動で 生成してくれるものだと思ってたりする でももう少しオプションの解析楽にならないかな? どうすればいいんだろう
738 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 01:51:02.53 .net] ある文字列のハッシュ値を求めたいんですけど どのLinux/UNIX/FreeBSDでも標準ではいってる ハッシュ化コマンドって何がありますかね? それからPOSIX標準コマンド?みたいなものってあるんですか? どこでも絶対はいっていなければいけないコマンドとか
739 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 02:25:15.03 .net] POSIXってこれ? pubs.opengroup.org/onlinepubs/9699919799/
740 名前:700 mailto:sage [2018/03/25(日) 02:29:04.48 .net] DATE=`date '+%Y%m%d%H%M'` TMPDIR='/tmp' BAKDIR='$TMPDIR/backup_%DATE' #echo "$DATE" mkdir $TMPDIR/backup_$DATE cp -rfp /home/atashi/doc $BAKDIR これだとcpが出来ないんですがどこが間違えていますか?
741 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 02:29:55.81 .net] ない
742 名前:700 mailto:sage [2018/03/25(日) 02:34:52.38 .net] 最後の行は cp -rfp /home/atashi/doc $BAKDIR/docです
743 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 02:41:09.90 .net] >>723 3行目の%が間違ってるよね? あと 4行目でデバッグ用にechoすべきは$BAKDIR 5行目はmkdir “$BAKDIR” 一つ一つ確認したほうがいいよ
744 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 02:44:00.47 .net] >>723 BAKDIR='$TMPDIR/backup_%DATE' こうじゃない? BAKDIR='$TMPDIR/backup_$DATE'
745 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 02:44:27.17 .net] あ、かぶったw
746 名前:700 mailto:sage [2018/03/25(日) 03:03:57.65 .net] >>726 >>727 ほんとだ。 $に直したんですが、 DATE=`date '+%Y%m%d%H%M'` TMPDIR='/tmp' BAKDIR='$TMPDIR/backup_$DATE' echo "$TMPDIR" #mkdir "$BAKDIR" echo "$BAKDIR" を実行すると、 $ ./hoge.sh /tmp $TMPDIR/backup_$DATE になってしまって、ダメでした。 mkdir "$BAKDIR" を入れると、カレントディレクトリに「$BAKDIR」というフォルダが出来てしまいました
747 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 03:13:28.38 .net] >>729 シェル シングルクォートとダブルクォートの違い 辺りでググってみて
748 名前:700 mailto:sage [2018/03/25(日) 03:17:52.62 .net] DATE=`date '+%Y%m%d%H%M'` TMPDIR='/tmp' BAKDIR="$TMPDIR/backup_$DATE" echo "$TMPDIR" mkdir "$BAKDIR" echo "$BAKDIR" >>730 出来ました! どうもありがとうございました。 $ ./test.sh /tmp /tmp/backup_201803250316
749 名前:700 mailto:sage [2018/03/25(日) 04:07:06.26 .net] 上の後に cp -rfp /home/hoge/doc $BAK_DIR/doc zip -r $BAK_DIR.zip $BAK_DIR をやるとzipを解凍してみたら tmpフォルダが出来てその中にbackup_201803250348フォルダが出来ているんですが、 zipを解凍したらbackup_201803250348フォルダが出来るようにするにはどうしたらいいですか?
750 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 09:39:54.86 .net] ( cd $TMPDIR ; zip -r backup_$DATE.zip backup_$DATE )
751 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 16:41:32.60 .net] すみません、timeoutコマンドのうまい使い方を教えてください シェルの中でtimeoutでタイムアウトさせた場合、シェル丸ごとごと落ちてしまいます タイムアウトさせた上で処理を分岐させて継続して処理させるにはどう制御したら良いのでしょうか timeout unzip || func_hoge といった感じで一応回避できたのですが、関数処理が終わると丸ごとプロセスキルされる事には変わらず、綺麗に終わらすことができません
752 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 16:54:52.07 .net] timeoutコマンドを実行したシェルは落ちないよ $ timeout 1 unzip … としたときに タイムアウト後にunzipのプロセスがキルされると困るって話??
753 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 17:56:56.40 .net] https://linuxjm.osdn.jp/html/GNU_coreutils/man1/timeout.1.html コマンドがタイムアウトした場合で、かつ --preserve-status が設定されていない場合、 終了ステータスは 124 になります。
754 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 19:03:35.42 .net] >>735 紛らわしい書き方をしてすみませんでした シェルスクリプトです 今環境がないので具体的な結果を示せませんが、例えば以下のような処理を実行するとtimeoutがプロセスを落とした(?)メッセージがコンソール出力された後、後続のechoは何も表示されません #/bin/bash timeout 1 unzip piyo.zip if [ $? -ne 0 ]; then echo hoge else echo fuga fi echo owata
755 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 19:19:17.27 .net] >>737 んー。こっちでは表示されるけれども… Script started on 2018年03月25日 19時18分12秒 testuser@debian:~/var/tmp/temp$ cat ./to.sh #! /bin/sh - timeout 1 sleep 10 if [ $? -ne 0 ]; then echo hoge else echo fuga fi echo owata testuser@debian:~/var/tmp/temp$ ./to.sh hoge owata testuser@debian:~/var/tmp/temp$ exit exit Script done on 2018年03月25日 19時18分30秒
756 名前:700 mailto:sage [2018/03/25(日) 21:40:43.57 .net] >>733 どうもありがとうございます
757 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 22:27:12.96 .net] ていうか BAKDIR がいつから BAK_DIR になったんだ
758 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 22:38:36.41 .net] このコードってvalidですよね? やってること・・・foo関数が最初に呼ばれた時に OS判定(相当)のことをして、OS毎に処理を切り替えて実行 関数を上書きすることで、次回以降は判定することなく処理実行 #!/bin/sh foo() { echo first call os_type=linux [ $os_type = linux ] && \ foo() { echo linux } [ $os_type = mac ] && \ foo() { echo mac } foo } foo foo
759 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/25(日) 22:53:06.94 .net] >>738 なんででしょうね(´;ω;`) もう一度見直してみます
760 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/26(月) 08:52:17.43 .net] くだらないtypoしていたに一票。 変だと思ったら、 sh -x スクリプト名 でなにやってるか眺めてみることをオススメする。 勿論、
761 名前:標準エラーを /dev/null に捨てたりするのもナシで。 [] [ここ壊れてます]
762 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/26(月) 11:04:26.16 .net] 再確認してきました 実際にはリンク先の48,49行目のログ整形のための処理で問題が起こっているようです timeout自体の問題ではないので一旦取り下げます、ご協力ありがとうございました https://pastebin.com/F5QC2Yu5
763 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/26(月) 11:13:47.05 .net] ワロタw fail() { case "$1" in 0) echo "Info :$2" ;; 1) echo "Warn :$2" ;; 2) echo "Error:$2" ;; 3) echo "Success :$2" exit 0 ;; 4) echo "Fatal:$2" exit 1 ;; 略 esac }
764 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/26(月) 11:16:57.86 .net] failwww ひどいなw fail 0 " **** test start ****" WAIT_SEC=5 time timeout -sKILL ${WAIT_SEC} unzip -t /home/xxxx/crypto.zip if [ $? -ne 0 ]; then fail 2 "hage" else fail 0 "hoge" fi fail 3 "**** test end ****"
765 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/26(月) 11:20:23.93 .net] おお、是非原因と対処法も書いてってください
766 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/26(月) 11:22:56.42 .net] failなのにsuccessなのか…
767 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/26(月) 11:47:56.48 .net] >>747 原因・・・他人のコードを理解せずにパクって、行き当たりばったりにコード書き加えて、終わらすこと 対処法・・・ちゃんとコード読んで理解して無駄なものをなくせ
768 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/26(月) 12:55:45.54 .net] >>749 全く耳が痛い、実際そういうレベルだけど頑張るよ(´・ω・`) > >は実際わけわからずに使ってるし
769 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/27(火) 02:35:57.99 .net] あー、ちくしょ、 ローカルでもリモートでも使うスクリプトを 置くディレクトリ名が決まらない ローカルだけで使うスクリプト リモートだけで使うスクリプト 両方で使うスクリプト どういうディレクトリ構成にしよう Windowsも考慮したいから シンボリックリンクは使いたくない
770 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/27(火) 02:56:48.81 .net] またお前か
771 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/27(火) 19:30:16.58 .net] >>751 ~/share/public/ に置いてる。
772 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/27(火) 20:19:33.81 .net] なんか冗長な感じ
773 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/27(火) 21:50:15.67 .net] うちは~/share/public/sbin/
774 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/27(火) 22:20:21.84 .net] あんまり良くないのかもしれんが…… /srvを特定の一般ユーザに対して書込可にして、 /srv/git/github.com/<account name>/dotfiles (GitHubで管理するなら) にしてる。
775 名前:名無しさん@お腹いっぱい。 [2018/03/27(火) 23:56:34.98 .net] >>753そんなことしてまで/srvに置く意味あんの
776 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/28(水) 14:37:11.36 .net] >>751 なぜ/usr/remote/binじゃダメなのか 理由を知りたい
777 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 01:01:26.37 .net] >>758 逆になぜ/usr/remote/binなのかの理由が知りたい。 なにかのアプリケーションが使うの?
778 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 02:51:11.17 .net] findのprint0やった、NULL文字区切りのファイル名一覧って POSIXのreadじゃ読み取れないんだな-dオプションがないから つーことはファイル名に改行、そのた制御文字が入るかもしれないことを 考慮するとPOSIXの範囲じゃ対応不可能ってことなのか
779 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 03:44:39.70 .net] >>760 なんで対応不可能だと思うんだよw じゃあどうして「POSIXが」ファイル名に改行含め制御文字を許可してるんだよって話。 C99どころかシェルコマンド(awk)レベルで余裕で扱えますが
780 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 09:47:58.90 .net] >>761 ひねくれた回答はいらないよ ここはシェルスクリプト POSIX shが対応してないって言ってんの
781 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 09:57:03.22 .net] \0区切りもshそのものの機能じゃなくね?
782 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木)
] [ここ壊れてます]
783 名前:10:03:19.16 .net mailto: 空白制御文字入りファイル名は for i in * で扱えるので、工夫次第だな。 findと組み合わせるには-print0は役に立たんから-execで頑張るしかないけど。 [] [ここ壊れてます]
784 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 10:30:24.37 .net] \0区切りがなんのコマンドによる出力かどうかは 今は関係ないんだよ。 いろんなコマンドでよく使われる\0区切りのデータに shが対応していないって話をしているんだから で調べてみたらawkもポータブルな方法では \0区切りには対応してないようだな
785 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 11:35:38.17 .net] >>765 > いろんなコマンドでよく使われる\0区切りのデータ って何がある?
786 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 11:37:07.53 .net] >>765 shはポータブルな方法で対応してるぞ。 xargsは確かに対応してないが。 findについては>>764 が書いてるように、遅くはなるもののポータブルな解はある。 xargs と sh の区別はつけようぜ。
787 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 11:39:23.23 .net] MacOSのsed (bsd)も\0扱えないっぽい まあもともと\0はC言語の終端文字だしな そんなのが扱えるほうがおかしいか
788 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 11:44:03.16 .net] >>767 xargsの話は誰もしてない shは\0を変数に入れられない shがポータブルな方法で\0文字に対応してるってのは嘘 (forは\0を使わない)
789 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 11:51:22.35 .net] >>769 改行じゃなくて \0 の話をしてるのか。 POSIXではシステムコールの仕様上、 \0 をファイル名に入れることは決してできない。 だから、ファイル名に \0 を使う話をすること自体が、POSIX的にナンセンス。
790 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 11:55:53.07 .net] >>770 > ファイル名に \0 を使う話 はお前しかしていないよ。
791 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 11:59:26.26 .net] >>771 発端の>>761 はファイル名に改行を入れる話だろう。 ファイル名中の改行をポータブルに扱う方法はshにある。 みんなちゃんとそう指摘してるのに君だけ勘違いしてる。
792 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 12:20:16.06 .net] は?バカなのかこいつ?
793 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 12:38:36.81 .net] なんで改行の入ったファイル名を扱うために、シェルが \0 を文字列の一部として 扱う必要があるなんていうアサッテの発想にいたるのか… (まあプログラミングができないせいで分かってないんだろうけど) もうちょっと態度がまともなら、ポータブルなやり方を具体的に教えてやっても いいが、 >>773 みたいな煽りは嫌いなので教えてやらないw
794 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 12:40:47.01 .net] findのprint0で出てくる/0区切りのファイル名一覧がreadで読み取れないンゴ…
795 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 12:50:37.16 .net] そもそも -print0 の出力をそのままの形でポータブルに read で読めるんじゃないかと考えること自体が間違い。 POSIXで規定されている read のオプションは -r だけで -d はないので、改行を含む文字列をそのままで read だけを 使って単一の文字列変数に取り込むことは、ポータブルには できない。 もちろん、だからといって sh で改行を含む文字列を扱えない なんてことにはならないのは言うまでもない。
796 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 12:54:44.85 .net] >>774 無知ごくろうさんw
797 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 12:56:17.18 .net] やっと>>760 が言ったことに追いついたのか?
798 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:05:43.31 .net] 773って757が言ったことを冗長に言い換えただけだなw
799 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:11:26.76 .net] >>774 >なんで改行の入ったファイル名を扱うために、シェルが \0 を文字列の一部として >扱う必要があるなんていうアサッテの発想にいたるのか… find作ったやつに言えw
800 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:21:49.15 .net] > findのprint0やった、NULL文字区切りのファイル名一覧って > POSIXのreadじゃ読み取れないんだな-dオプションがないから ここまでは正しい。しかし、 > つーことはファイル名に改行、そのた制御文字が入るかもしれないことを > 考慮するとPOSIXの範囲じゃ対応不可能ってことなのか これが xargs の文章であれば、その通り。 しかしこれが sh についての文章であれば、完璧に間違い。 これだけ繰り返し指摘されてもいまだに理解できないような奴でも Bourne shell でスクリプトを書くようになったんだなという変な感慨があるな。
801 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:24:21.25 .net] >>781 >これが xargs の文章であれば、その通り。 だれもxargsの話なんかしてない。(2回目) [] [ここ壊れてます]
803 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:26:26.64 .net] >>781 はxargsが\0扱えることも知らなそうw
804 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:30:47.80 .net] これだけヒント書いてるのに、いまだに 「そのままの形だと read で扱えない」 と 「sh だとできない」 が等価だと主張しているのは、アホの子なのか、 煽れば答を教えてもらえると期待しているのか、 どっちなんだろうね。
805 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:36:00.29 .net] >>783 POSIX の xargs に -0 オプションは規定されてないので、 「ポータブル」という条件下ではできない。 まあ POSIX の find に -print0 オプションが入ったのもわりと最近なので、 そのうち xargs でも待ってればそのうち -0 が追加されるとは思うが。
806 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:39:13.18 .net] 答えはfor in * を使うこと 俺が代わりに答えておいてやるよ なおshで\0を使うと言う答えではない
807 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:41:04.45 .net] POSIXはprint0に対応する前に ファイル名に制御文字を使用できないようにしろ
808 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 13:53:52.47 .net] 賛成
809 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 14:01:21.67 .net] for使ってfindっぽいものを自作したとして それをパイプで別コマンドに流そうとした時に またファイル名に改行が含まれていた時問題が発生するんだよな
810 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 15:15:24.81 .net] for で書くのなら、その結果のファイル名をわざわざ 他のプロセスにパイプで渡すなんてことはせずに、 そのシェル自身で処理するか、 あるいは他のプロセスに渡すなら引数を使え ってだけの話だな。 >>764 が既に書いてる話なのに、なんでそこから 35コメも無駄に費やされてるんだか。
811 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 15:18:45.25 .net] ちなみに for で書く以外のやりかたもあるけど、 これも >>764 が既に最後の文で書いてる。
812 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 15:30:33.97 .net] posixの範囲じゃ改行が含まれたファイル名を パイプでつなげられないってことかな
813 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 15:56:18.36 .net] >>792 「POSIXの範囲内じゃ」は誤解を招く表現で、正確には 「POSIX Shell & Utilities の範囲内じゃ」だな。 「POSIX System Interfaces」を使えば問題なくできるからな。 まあシェルのスレなわけで「POSIXの範囲内じゃ」でも間違いとまでは言えないが。 あと、find -print0 が POSIX で規定されたってのは間違いだった。 そういう拡張もあることも言及はされてるが、規定には追加されていない。 でもって POSIX 的には「find -print0 | xargs -0」じゃなくて、 「find -exec コマンド {} +」を使えってことになってる。
814 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 16:20:44.05 .net] でも、find -exec じゃシェル関数に渡せないからなぁ findは諦めろってことかな
815 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 16:44:16.87 .net] find を諦めるんじゃくて、シェル関数の方をあきらめて、独立したシェルスクリプトにしろってことだよ。 find -exec コマンド {} \; だとコマンドの起動回数が多いからシェルスクリプトにすると遅いのが問題になるけど、 find -exec コマンド {} + ならコマンド起動回数は相当に減るから、独立したシェルスクリプトにしても特に問題はない。
816 名前:名無しさん@お腹いっぱい。 [2018/03/29(木) 21:07:16.05 .net] AWKの区切り記号をヌル文字にすればいいんでは。
817 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/29(木) 23:50:16.88 .net] ぬるぽ?
818 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 00:19:50.52 .net] >>796 試してみたけどね。RSに\0入れられなくてね もう全滅w
819 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 02:47:00.90 .net] >>798 俺の所では通ったけど、もしかしてOS依存なのかな。 @Debian GNU/Linux
820 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 03:18:23.09 .net] OSっていうかGNU系かどうかだね GNU系はだいたい\0に対応している BSD系とかは対応してない。だからMacとかつらい 私的なスクリプトならMacのコマンドをGNU化するやつ 入れて済ませても良いんだが
821 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 12:29:37.47 .net] >>795 バカwww
822 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 12:30:43.62 .net] このスレでこんなに草を見るとは思わなかった
823 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 13:42:54.12 .net] シェル関数にこだわる理由が思いつかん。
824 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 15:22:07.88 .net] そこにシェルスクリプトがあるから、的な何かかな?
825 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 15:47:33.25 .net] コンパイルせずに実行できる(実質)唯一の共通規格言語だからじゃないの? PythonとかはPOSIXの範囲外だからどこでも動くとは限らないし。 え? UNIX™なのにPOSIXと齟齬ありまくりの実装のAIXちゃん? 知らない子ですねぇ……。
826 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 16:25:04.06 .net] localみたいにPOSIXじゃないけどだいたい 使えるってもの他にあったら教えて📡
827 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 16:38:24.19 .net] AIXはマジでどうにかして欲しい seqすらないの本当に面倒臭い
828 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 17:03:19.85 .net] AIX案件なんてあるの?
829 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 17:23:17.72 .net] 俺が行ってる現場だと1年くらい前までは現役でPowerでAIXを使ってたよ。 今はRedHatにリプレースされちゃったけど……そんなに嫌いではなかった。 >>807 jotも無かったっけ?
830 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 17:29:23.50 .net] うちは親会社モニョモニョだから結構AIXが多くて嫌になる >>809 手元のやつだとないな。AIX7.1だけど
831 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 20:26:28.33 .net] >>804 >>805 それならシェル関数ではなく普通のシェルスクリプトでもいいだろう。 >>794 は単なるシェルスクリプトではなくシェル関数の利用にこだわってて謎。
832 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 20:31:30.33 .net] シェル函数って somefunc() { echo "This is somefunc." } っていうやつでしょ? >>794 はそういう意味で使ったんじゃない可能性が出てきたな。 単に「パイプに渡せない」というような趣旨の要望を言いたかったのかもしれん。
833 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 20:47:44.46 .net] >>812 たぶん find の -exec のとこに書けないって意味で書いてるだろうから、 シェルスクリプトじゃなくてシェル関数だと思う。
834 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 20:54:31.32 .net] たとえパイプ経由でファイル名を渡せないって意味だったとしても、 find -exec でそれと同一機能が実現できるならそ別にいいじゃん。 >>794 が find -exec の何を気に入らないのかやっぱり分からんな。
835 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 21:02:32.72 .net] まぁでも「気に入らない」ってのは十分不採用の理由にはなるよな
836 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 21:09:13.58 .net] 趣味なら理由になるかもなあ。 でも仕事じゃ理由にならん。 要件を満たしてるってのは仕事じゃ最低限度の基準だからな。 POSIXに適合するシェルスクリプトにしたいっていう要件が最初に出てるのに、 趣味に合わないから採用しない、仕方ないから実装を諦めるなんて奴がいたら、 仕事なら無能扱いだよ。
837 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 21:13:23.18 .net] そりゃ仕事と趣味は別だろ 何を当たり前の話をしてるんだ
838 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/30(金) 21:31:21.92 .net] いや、あの謎のこだわりに合理的な理由があるのか、 それともホントに完全に趣味だけの話なのかが気になってたんだよ。 合理的理由ナシ、完全に個人の趣味ってことでFAなら、それでいいんだスマン。
839 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/31(土) 00:46:42.95 .net] 合理的じゃないけど合理主義だよね
840 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/31(土) 01:12:03.45 .net] aliasって面白いなー。これでなんか面白いことできそう #!/bin/sh alias foo="foo() { echo before; foo_; echo after; }; foo_" foo() { echo foo } unalias foo foo # ↓ # before # foo # after
841 名前:817 mailto:sage [2018/03/31(土) 01:41:51.42 .net] やべぇ、このaliasの使い方、 めちゃくちゃ強力じゃないか? 文法の拡張が可能かもしれない こんな所でネタにするレベルじゃないわ
842 名前:817 mailto:sage [2018/03/31(土) 02:06
] [ここ壊れてます]
843 名前::02.61 .net mailto: 黒魔術置いときますね #!/bin/sh def() { alias begin="$1() { echo before; $1_ "\$@"; echo after; }; $1_() { $3=\$1" alias end="}; unalias begin end" } def foo [ i ] begin echo foo $i end def bar [ j ] begin echo bar $j end foo 123 bar 456 [] [ここ壊れてます]
844 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/31(土) 02:30:40.57 .net] そもそもaliasってシェルスクリプトの中で使えたっけ。 俺の環境では使えたけども
845 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/31(土) 02:48:01.26 .net] >>823 bashとかだとデフォルトでは無効 expand_aliasesを使えば有効にできる ただ>>820 の挙動が全てのシェルで同じなのかは調べてない aliasの挙動をちゃんと把握してはないけど どうやら行単位で実行前に、単純な文字列置換が行われてる感じだね だからevalでもできないスクリプトの自己書き換えみたいなことができちゃう 参考(ちゃんと読んではいないw) magicant.txt-nifty.com/main/2017/10/yash-2-285-b4d8.html
846 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/31(土) 02:57:08.73 .net] AIXの人はseqってどうやって代用してる?
847 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/31(土) 09:20:43.88 .net] awkでチョチョイでは?
848 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/31(土) 22:32:30.06 .net] みんな、変わった(?)の使ってるな。 Linux、BSD、Solarisなどのメジャーなもの以外で何がよく使われてるの?
849 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/03/31(土) 22:52:09.24 .net] Mac
850 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/01(日) 01:13:29.58 .net] MacはBSD系ってことでまとめましょうw
851 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/02(月) 07:41:52.65 .net] $ man basename > man_basenam でできるファイルを emacsとテキストエディットで開いたものが次のものです。 https://imgur.com/a/8ggUs? これはそういう仕様なのでしょうか?文字化けというか不思議な コードになっています。できれば教えていただけないでしょうか
852 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/02(月) 08:19:02.96 .net] surf.ml.seikei.ac.jp/~nakano/JMwww/html/man/man1/man.1.html バックスペースとアンダースコアがない プレーンテキスト版の man ページを得るには、コマンド # man foo | col -b > foo.mantxt を実行すること。
853 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/02(月) 08:25:59.92 .net] >>830 man エスケープシークエンス で検索。
854 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/02(月) 10:28:43.52 .net] man manすればいい TIPSに載ってる
855 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/02(月) 14:17:49.92 .net] あと、emacs に限って言うと M-x man (ESC x man リターン) と叩いて、man のエントリー名を入れれば、 きっちり整形した結果を表示してくれるから、 col -b を使う必要はあまりない。
856 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/02(月) 18:03:58.27 .net] >>825 ググってみたらこんな方法があったよ。 ↓ yes '' | cat -n | head -100 | sed 's/ //g'
857 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/02(月) 18:24:12.37 .net] yesはなんか処理間違えると止まらなくなりそうで怖いんだよな
858 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/02(月) 21:00:30.14 .net] >>835 POSIX catには-nオプションがない[*1]のでnlコマンドを使う方法を提案する。 $ yes '' | nl -b a -n ln | head -n 10 | sed -e 's/[ \t]*//g' | tr '\n' ' ' *1: pubs.opengroup.org/onlinepubs/9699919799/utilities/cat.html
859 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/02(月) 21:07:04.97 .net] $ yes '' | nl -b a | head -n 10 | tr -d ' \t' | tr '\n' ' ' 修正。もっと簡単にできるわww
860 名前:834 mailto:sage [2018/04/02(月) 21:28:17.87 .net] これもしかしたらheadコマンドとnlコマンドの順番入れ替えると速度違う? んなことないと思ってたけどビミョーに差があるかもしれん。 詳しい人検証してくれ……。 $ time
861 名前: for a in $(seq 10000); do seq 10000 > /dev/null; done real 0m14.601s user 0m0.452s sys 0m3.736s $ time for a in $(seq 10000); do yes '' | nl -b a | head -n 10000 | tr -d ' \t' | tr '\n' ' ' > /dev/null; done real 1m2.693s user 0m5.672s sys 0m21.032s $ time for a in $(seq 10000); do yes '' | head -n 10000 | nl -b a | tr -d ' \t' | tr '\n' ' ' > /dev/null; done real 0m47.944s user 0m1.472s sys 0m17.820s [] [ここ壊れてます]
862 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/02(月) 21:41:13.89 .net] 並行して動くか、出力の完了を待ってから動くかの違いだろ
863 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/02(月) 23:47:22.15 .net] パイプで繋いでプロセス4つも5つも上げるくらいなら、 素直にawk 1プロセスですませた方が軽くないか?
864 名前:836 mailto:sage [2018/04/02(月) 23:56:24.81 .net] >>841 俺awkできないんだわ。恥かしいことにw そのうち勉強しようしようと思っていて今にいたる。 awkでやるとどんな感じになる?
865 名前:836 mailto:sage [2018/04/03(火) 00:14:31.67 .net] ていうかseqの既定の出力を勘違いしてた $ yes '' | head -n 10 | nl -b a | tr -c -d '\n[:digit:]' こんなもんかな? $ time for a in $(seq 10000); do yes '' | head -n 10000 | nl -b a | tr -c -d '\n[:digit:]' > /dev/null ; done real 0m42.358s user 0m0.544s sys 0m14.452s
866 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/03(火) 00:40:30.08 .net] awk 'BEGIN {for(i=10;i<=20;i++) printf "%d\n",i}'
867 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/03(火) 01:08:09.19 .net] yes '' | sed -n '=;10q'
868 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/03(火) 14:22:10.27 .net] sedでやるとは
869 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/03(火) 18:22:16.97 .net] 何かゴルフっぽくなってきてるw >>845 これ凄いね!
870 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/03(火) 18:57:15.26 .net] sedって計算完備なんだっけ。 やろうと思えばsed単体でseq作れるよね
871 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/03(火) 19:03:30.37 .net] sedでlispを作った人はいる
872 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/03(火) 19:33:57.64 .net] どうかしてるぜ
873 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/03(火) 22:20:55.54 .net] >>845 使うことないだろうけど感動した
874 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/03(火) 23:45:32.30 .net] そんなことより野球やろうぜ
875 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/04(水) 07:05:11.03 .net] >>848 > sedって計算完備なんだっけ。 www.catonmat.net/blog/proof-that-sed-is-turing-complete/
876 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/05(木) 00:02:39.79 .net] 家具家電彼女完備の家に住みたい
877 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/05(木) 02:42:14.79 .net] sinyabin.shの中でradiru.shを実行しています。 sinyabin.shの中の変数をradiru.shに引き継ぎたいんですが、どう書けばいいんでしょうか?
878 名前:852 mailto:sage [2018/04/05(木) 03:31:27.11 .net] radiru.shには、 pushbulettに録音開始の通知 ffmpegを使ってaacのダウンロード l-smashを使ってaacをm4aに詰め替え aacの削除 dropboxへm4aのアップロード ローカルのm4aの削除 pushbulettに録音終了の通知をするコマンドを記入 radiru.shは $ sinyabin.sh チャンネル 録音時間 ファイル名 で録音出来るようになっているので、 録画したい番組毎にsinyabin.sh等を作りその中に、 $ sinyabin.sh チャンネル 録音時間 ファイル名 を記入しています。 radiru.shの中のl-smashでaacをm4aにする際に番組名やアーティスト名などのタグ付けも一緒にやりたいので、sinyabin.sh側であらかじめl-smashで指定するタグのオプションを記入出来ればと思いました。
879 名前:852 mailto:sage [2018/04/05(木) 03:41:17.05 .net] radiru.shはaacのダウンロードだけにして、 Pushbulettへの通知、l-smash、Dropboxなどはsinyabin.shの方に書いたほうがいいんでしょうか? そうすれば、ちょっと録音したいと思ったときいちいち番組毎のスクリプトをつくりその中にIDタグなど細かく書かなくてもすむから楽かなと。 でもそれだと、番組毎のスクリプトに「Pushbulettへの通知、l-smash、Dropbox」といったコマンドを書かないといけないので無駄かなあとも思いました。 どういうフローがいいと思いますか?
880 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/05(木) 10:10:37.31 .net] export すりゃいいんじゃない
881 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/05(木) 10:22:06.60 .net] こう質問の仕方が下手だと答える気失せるな 変数外に出せばいい
882 名前:セけ [] [ここ壊れてます]
883 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/05(木) 10:59:32.39 .net] 852だけで良かったのにね
884 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/05(木) 13:53:42.01 .net] プログラミング素人っぽいし、加減がわかってないだろうから、 情報が多すぎる方は不問にした方が。 足りないよりは多すぎる方がずっとマシ。
885 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/05(木) 18:12:51.21 .net] >>856 radiru.sh に引数でタグ情報を渡せばいいと思いますが。
886 名前:名無しさん@お腹いっぱい。 [2018/04/12(木) 09:36:41.69 .net] bashだと$LINENOでファイルの中での現在の行数が取得できるのですが、 dashやzshだと関数の中にいる時、関数のはじめからの行数になってしまいます。 どうにかして現在の行数を取得する方法はないでしょうか?
887 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/13(金) 19:02:57.86 .net] zshよくしらんけど、関数定義の手前の行番号を 変数にでも取っといて足し算すりゃいいんじゃね?
888 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/13(金) 19:07:33.88 .net] まぁやりようは如何様にでもあるんだろうが、 ニュアンス的に$LINENO並の手軽さで取得する手段はないかってことじゃね 俺は知らん
889 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/13(金) 22:14:56.99 .net] $LINENOってどういう使い方を想定して作ったんだろうね
890 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/13(金) 22:51:23.99 .net] どこを見ればPOSIXシェルスクリプトの確かな仕様に出会えるのか知らないけど、 ググって出てきたこれにはLINENO書いてあるな。 User Portability Utilities optionが必要みたいだけど、なにそれ? pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
891 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/13(金) 23:40:07.60 .net] 実装オプションにつけてあるIDコードの一つみたいだな。 コードの一覧は ttp://pubs.opengroup.org/onlinepubs/9699919799/help/codes.html にある。 オプション機能なので、実装されてるとは限らない。
892 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/14(土) 00:40:09.23 .net] LINENOが仕様どおりに実装されてないのは この際見なかったことにして、現在使われてる POSIX準拠シェルで完全に実装されてないものなんて有るの? そもそも現在使われてるPOSIX準拠シェルってどんなのがあるんだろう bash、ash、dash、zsh、ksh、mksh、yash、posh 他に知ってる?
893 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/14(土) 16:31:32.55 .net] $LINENO使って何をしたいんだろ
894 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/14(土) 19:01:06.26 .net] デバッグログ以外になにかあんの? だからこそデバッグログとして使えない $LINENOを何のために作ったのか理解できない
895 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/14(土) 19:14:03.26 .net] ${(%):-%I}
896 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/14(土) 20:10:19.92 .net] $ ${(%):-%I} -bash: ${(%):-%I}: 誤った代入です
897 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/17(火) 22:14:01.26 .net] https://ja.wikipedia.org/wiki/IOCCC > ^ Bourne Shellのソースコード( minnie.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/sh )は > マクロ( minnie.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/sh/mac.h )を使用した > 「ALGOLのような見た目のC」で書かれていることで悪名高い
898 名前:名無しさん@お腹いっぱい。 [2018/04/18(水) 10:39:06.43 .net] 自己解凍するファイルって便利だな シェルスクリプトで解凍とインストール手順を記述して それをバイナリと結合するだけでmsiみたいなことができる
899 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/18(水) 15:04:27.31 .net] >>875 それはちなみに sh アーカイブ形式って呼び名がついてる。 sharっていう自己解凍シェルスクリプト作成専用コマンドも昔はあった。 なお、ウイルスやマルウェアの温床だということで廃れた模様。
900 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/18(水) 15:22:26.44 .net] sharはそれでインストールまでするというより、tar.gz などのバイナリファイルを テキストにしてメールやニュースで送るために使うことが多かった
901 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/18(水) 16:21:07.45 .net] >>877 へー、uuencodeしか知らんかった
902 名前:872 mailto:sage [2018/04/18(水) 21:50:42.61 .net] あーわりと昔からある手法なのね…… VMware Horizon Clientのインストールイメージがその形で,俺は正直そういうシェルスクリプトとバイナリが結合されてるファイルを始めて触ったんで 画期的なアイデアに思えたんだわ……
903 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/18(水) 23:47:33.56 .net] echo "1 + 2" | bc > /tmp/a とすると/tmp/aには2バイト、16進数で 33 0a のデータが入っています。 a=$(echo "1 + 2" | bc) printf "$a" > /tmp/a しかしこうすると$aには1バイトしか入ってないようです。 また [ "$(printf '1')" = "$(printf "1\n\n\n\n\n")" ] これは一致した文字とみなされるようです こういった挙動はどこを見れば理解できるでしょうか?
904 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/18(水) 23:55:18.86 .net] a="$(printf '1\n\n\n')" とやってもaには1しか入っていない a="$(printf '1\n\n\n2')" しかしこうすると5バイト入ってる その状態から a=${a%?} を末尾の2を削除すると a には4バイト、1\n\n\n が入っている うーん?
905 名前:名無しさん@お腹いっぱい。 [2018/04/19(木) 00:06:08.07 .net] >>880 コマンド置換 $(...) の仕様 pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_03 > removing sequences of one or more <newline> characters at the end of > the substitution. Embedded <newline> characters before the end of > the output shall not be removed; however, they may be treated as > field delimiters and eliminated during field splitting, depending on > the value of IFS and quoting that is in effect. If the output > contains any null bytes, the behavior is unspecified. bashのマニュアルにも同様の記述がある linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbBC > bash は command を実行し、 command の標準出力でコマンド置換の部分を > 置き換えます。この際、末尾の改行文字は削除されます。 文字列の途中に > ある改行文字は削除されませんが、 単語分割の際に削除されることがあり > ます。
906 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/19(木) 00:06:21.64 .net] かといってこうやると4バイトでてるんだよなー printf '1\n\n\n' | hexdump.exe -C
907 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/19(木) 00:19:37.42 .net] コマンド置換の仕様かぁ 普通のやり方ではコマンドの出力結果を変数に入れるときは 末尾の改行は絶対消えるってことかなー read使えばって思ったけど、あっちは改行区切りだしなー ちなみに $aに1\n\n\nを無理やり入れて、 $bに1を入れて [ "$a" = "$b" ] で比較したら不一致になったよ
908 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/19(木) 00:24:31.94 .net] あたりまえやろw
909 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/19(木) 00:54:10.53 .net] よくこんな単純なルールで辻褄取れてるよなー 思いつきで考えたとしか思えないルールなのにw
910 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/24(火) 02:26:08.83 .net] 単純なルールのほうが整合性は取りやすいんでは? 寧ろ複雑な規則だと実装に矛盾が生じたりしそう。
911 名前:名無しさん@お腹いっぱい。 [2018/04/27(金) 23:17:19.66 .net] ちょっと質問 偶数日と奇数日で処理を分けたいんだけど、上手くできない どうしたら良いのかアドバイスください #!/bin/sh DATE=`date '+%d'` # 日 を取得 buf=$(( $DATE % 2 )) # 計算 if [ ! $buf ]; then # 偶数 hoge else # 奇数 fuga fi
912 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/27(金) 23:43:49.55 .net] その計算するとこ()の中に$いるっけ
913 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/28(土) 00:55:01.80 .net] >>888 #! /bin/sh - DATE="$(date "+%d")" if [ $((DATE % 2)) -eq 0 ]; then echo "今日は偶数Day" else echo "今日は奇数Day" fi ある種の言語(
914 名前:Cとかだっけ?)はif文に0を放り込めるけど、 コマンドを逐次実行するだけのシェルスクリプトでは無理。 面倒だけど数値判定をしなきゃいけない。 あと、>>889 氏の言う通り演算置換内の変数に弗記号は不要。 あと、コマンド置換は容易く入れ子にできて対も分かりよい$()を使おう。 POSIX sh 2003でもサポートされているので安心して。 [] [ここ壊れてます]
915 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/28(土) 01:37:16.44 .net] BSDで標準コマンドだけで現在時刻(もしくは起動してからの)ミリ秒ってとれないのな /proc/uptimeもBSDないみたいだしどうにかして取れないかなー ファイルに書き込んでタイムスタンプで 取れないかなーとかもやってみたりもしたw ファイルシステムによっては書き込まれるみたいだが これも標準コマンドだけでどうやればー できればなにも入ってない素のコマンドだけでやりたいんだよね Perlでもやれるけど、dateコマンドに比べたら 起動時間が10倍も違うんだよな。 あ、ベンチマークというかコマンドの実行速度を細かく知りたいために使いたい。 timeコマンドは標準出力(エラーだっけ?)を乱すので使いたくない
916 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/28(土) 01:49:17.29 .net] あれとれなかったっけ? なんか取れた気がしたけど気のせいだったか
917 名前:名無しさん@お腹いっぱい。 [2018/04/28(土) 19:41:21.09 .net] >889-890 ありがとうできたよ。bufが空白になって常にelseに倒れてたから助かりました。 $の位置が良くわからなくて困っていたんだ Cならいくらでも書けるんだけど、慣れない言語はちょとね・・・
918 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/28(土) 20:34:44.86 .net] >>891 timeコマンドの出力は標準エラーだよ。 標準出力の方は乱さない。 標準エラーが乱れる方も (time sh -c '測りたいコマンド 2>&3' 2>/tmp/time.out ) 3>&2 みたいにすれば回避できるから、素直に time コマンド使う方がいい。
919 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/28(土) 23:27:39.64 .net] >>894 もう一つ問題があってなぁ。 dashじゃtimeコマンドビルトインじゃないんだよ ビルトインじゃないからシェル関数で使えないんだよね
920 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/29(日) 00:02:10.75 .net] まあ使えないわけじゃないし候補にはなるけど、 OSごとに処理分けるの嫌だなぁ
921 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/29(日) 00:07:48.59 .net] /bin/timeって明示すれば?
922 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/29(日) 02:10:30.87 .net] もしくは command -p time
923 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/29(日) 08:34:10.39 .net] いや、だからtimeコマンドだと シェル関数扱えないからだめだって言ってるやん?
924 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/29(日) 11:24:09.19 .net] 放置で
925 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/29(日) 18:50:59.66 .net] どうぞ
926 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/04/30(月) 09:52:20.53 .net] mkfifo便利すぎる
927 名前:名無しさん@お腹いっぱい。 [2018/04/30(月) 10:17:56.64 .net] シェルスクリプトの入門書を教えてください ソフトバンクから出てるUNIXシェルスクリプト〜みたいな書名のものがAmazonでは評価高いみたいなんですが… 先輩方のおすすめを教えてください
928 名前:名無しさん@お腹いっぱい。 [2018/04/30(月) 14:27:06.11 .net] >>903 こういう分野に関してはいまだにオライリーは信頼できる書籍を発行してるぜ。 まあ俺の持論だがw https://www.oreilly.co.jp/books/4873112672/ ↑これとか参考になる。コマンドの列挙だけじゃなく、システムとシェルの性質とか非常に基礎的な部分から触れてるのでよい(と思う)。
929 名前:900 [2018/04/30(月) 16:27:23.98 .net] >>904 >システムとシェルの性質とか これ正に知りたいことです 連休中本屋さん行くので是非中身読んで検討します ありがとうございます
930 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/02(水) 16:02:31.91 .net] コマンドの出力結果を一時ファイルを作らずに 一行一変数に入れたいんですけどい
931 名前:い方法はないでしょうか? 変数はLINE1、LINE2・・・みたいな名前で bash依存になる配列は使わない方針です。 foo | while read -r line; do LINE1=$line done みたいにするとサブシェルだから ループ終わると消えてしまうし [] [ここ壊れてます]
932 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/02(水) 16:34:46.41 .net] sedかawkで代入文いっぱい出してevalかな。 特殊文字のエスケープちゃんと書かないといけないけど。
933 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/02(水) 16:42:46.69 .net] cat <<. | 1st Line 2nd Line 3rd Line . while read -r lineval; do ctlino=$((ctlino + 1)) printf '%s%s' 'LINE'"${ctlino}"'='"$(printf '%s' "'")""${lineval}""$(printf '%s' "'")" ';' done | printf '%s%s\n' "$(cat)" ':' とりあえずこうすると LINE1='1st Line';LINE2='2nd Line';LINE3='3rd Line';: という出力が得られる。これを評価すればいいと思ったができねえ。
934 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/02(水) 16:59:04.80 .net] 改良? cat <<'EOF' | 1st Line 2nd Li'ne 3rd Line EOF while read -r lineval; do ctlino=$((ctlino + 1)) printf '%s' "${lineval}" | sed 's/'"'"'/'"'"'"&"'"'"'/g' | printf '%s%s' 'LINE'"${ctlino}"'='"'""$(cat)""'" '; ' done → LINE1='1st Line'; LINE2='2nd Li'"'"'ne'; LINE3='3rd Line'; :
935 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/02(水) 17:00:08.10 .net] 改良? cat <<'EOF' | 1st Line 2nd Li'ne 3rd Line EOF while read -r lineval; do ctlino=$((ctlino + 1)) printf '%s' "${lineval}" | sed 's/'"'"'/'"'"'"&"'"'"'/g' | printf '%s%s' 'LINE'"${ctlino}"'='"'""$(cat)""'" '; ' done | printf '%s%s\n' "$(cat)" ':' とりあえず単引用符のエスケープだけ。他にも必要なものがあればsedを挟んでいけばいいんでは。
936 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/02(水) 17:12:01.86 .net] > sedかawkで代入文いっぱい出してevalかな。 やっぱり残る手はそれか
937 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/02(水) 17:18:49.70 .net] $ radico rec -id=FMT -s=20180502040000 というコマンドがあったとして、「-s=」あとに今日の朝4時「date +"%Y%m%d"040000」の結果を入れたいんですが、一行で書く方法を教えてください
938 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/02(水) 17:28:29.77 .net] お前はこの前のレス群に対する結果とか報告してからにしろ
939 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/02(水) 18:12:16.93 .net] 何も考えずぶん投げるけど変数exportとかじゃだめなのか
940 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/02(水) 18:28:09.05 .net] 出来ました!
941 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/02(水) 19:53:51.97 .net] >>912 $ radico rec -id=FMT -s=$(date "+%Y%m%d040000") コマンド置換くらい自力で調べーや
942 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/02(水) 21:09:33.58 .net] 引数 $1 $2 $3 ・・・ のうち、特定の範囲n〜mを 別の関数の引数に渡すのってどうやればいいだろうか? n〜mは条件で変わるものとする
943 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/02(水) 21:27:56.41 .net] >>917 一兆個のシェルを書いてきた俺がそんな事必要になった事がないから お前の解こうとしてる問題が間違っている
944 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/02(水) 21:34:19.62 .net] >>918 やってることが簡単なパーサーのようなものですからね。 exprをシェルスクリプトで実装しているようなものです。 流石にこういう高度なことはやったことがないのでは?
945 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/02(水) 22:27:50.67 .net] shift $argnum とかは?
946 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/02(水) 22:47:14.90 .net] >>920 それだと前からn個以降は実現可能だけど 範囲ができないんですよね。
947 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/02(水) 22:51:49.30 .net] bashだとこんな感じですね foo() { echo "${@:2:3}"; } $ foo 1 2 3 4 5 2 3 4
948 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 00:40:42.42 .net] >>921 for文使えば? selectargnum() { fromargnum=$1 toargnum=$2 shift ${fromargnum} for arg in $(seq $((toargnum - fromargnum + 1))); do printf '%s\n' "$2" && shift done } selectargnum 3 5 "$@" 注意: シェル函数への第1,2引数は必ず非負整数で,引数の範囲内であるべし。
949 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 00:47:51.26 .net] #! /bin/sh - selectargnum() { fromargnum=$1 toargnum=$2 shift ${fromargnum} for arg in $(seq $((toargnum - fromargnum + 1))); do printf '%s\n' "$2" shift done } selectargnum 2 4 "$@" もうちょっと親切に書くわ。 シェル函数selectargnumの ::仕様:: selectargnum <開始位置> <終了位置> <(処理したい)引数> 開始位置・終了位置は省略不可で,常
950 名前:識的な範囲であることを前提にしている。 ::使い方:: 上のコードを適当な名前のファイル(例えばselarg.sh)に保存して実行権限を賦与。 $ chmod +x ./selarg.sh あとはファイル中のselectargnum函数の第1,2引数を書き換えて使える。 上の例なら $ ./selarg.sh "第1引数" "第2引数" "第3引数" "第4引数" "第5引数" に対して 第2引数 第3引数 第4引数 という出力が得られる。 [] [ここ壊れてます]
951 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 00:50:36.20 .net] seqを除いてPOSIX準拠。 もしもより厳密にPOSIXに従いたければ当該箇所を seq $((toargnum - fromargnum + 1)) から yes | head -n $((toargnum - fromargnum + 1)) としてもいいだろう。
952 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 03:17:05.15 .net] >>922 のせいで勘違いさせたようですね > 別の関数の引数に渡すのってどうやればいいだろうか? 重要なのはこれ another_function() { for i in "$@"; do printf "%s\n" "$i" done } foo() { another_function "${@:2:3}"; } another_functionはそのまま使って、 fooの部分をPOSIX準拠にして 以下のような出力を得たいということです $ foo a "b 1" "c 1" d e b 1 c 1 d
953 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 03:18:03.35 .net] eval使うしか無いっすかね?
954 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 03:20:16.97 .net] このコードの応用でできますかね? いまいちこのコードがなにやってるのかよくわからんのですが https://unix.stackexchange.com/questions/258512/how-to-remove-a-positional-parameter-from for arg do shift [ "$arg" = "-inf" ] && continue set -- "$@" "$arg" done printf '%s\n' "$@"
955 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 03:42:12.53 .net] >>926 おいおいヒドいな俺の>>923-925 は無視かよ 引数をどうにかしたいコマンドをsomefuncとして #! /bin/sh - selectargnum() { fromargnum=$1 toargnum=$2 shift ${fromargnum} for arg in $(yes | head -n $((toargnum - fromargnum + 1))); do printf '%s\n' "$2" shift done } somefunc() { printf '%s\t%s\n%s\n' "$2" "$3" "$1" } somefunc $(selectargnum 2 4 "$@") こういうので実現できると思うんだが? なにかこれでは駄目な点があれば言ってくれ。 せっかくGW中とは言え頭使ったのにあまりにもあまりな仕打ちじゃマイカ
956 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 04:08:41.64 .net] >>929 somefuncは分かりづらいんでこう書き換えるけど somefunc() { printf '%s\n' "$@" } $ test.sh "a" "b" "c" "d" "e" b c d こうなるところ $ test.sh "a 1" "b 1" "c 1" "d 1" "e 1" b 1 c 1 d 1
957 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 04:23:08.37 .net] somefuncはこうしないとだめだな。 何番目の変数に入っているのか分かりづらい somefunc() { printf '1: %s\n' "$1" printf '2: %s\n' "$2" printf '3: %s\n' "$3" }
958 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 04:23:43.87 .net] なんかすごいどうでもいいことしてる気にならん?
959 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 04:26:07.99 .net] しょうがないだろう。 引数には空白、シングルクォート、ダブルクォート、改行が 含まれる可能性があるんだよ
960 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 04:29:26.87 .net] 一見うまくいったと思いきや $ test.sh "a" "b" "c" "d" "e" 1: b 2: c 3: d 変数Aに改行が含まれている文字列を入れ $ A="b b b b " 以下のように実行するとおかしくなる $ test.sh "a" "b${A}b" "c" "d" "e" 1: bb 2: b 3: b > なにかこれでは駄目な点があれば言ってくれ。 駄目な点を言った
961 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 04:32:29.46 .net] なお、俺が書いたコードだと以下のように正しく出力される $ test.sh "a" "b${A}b" "c" "d" "e" 1: bb b b b b 2: c 3: d >>928 を参考にして以下のように書いた selectargnum() { func=$1 start=$2 length=$3 shift 3 i=0 last=$((start+length)) for arg in "$@"; do : $((i+=1)) [ $i -gt $length ] && shift [ $i -ge $last ] && continue shift set -- "$@" "$arg" done $func "$@" } somefunc() { printf '1: %s\n' "$1" printf '2: %s\n' "$2" printf '3: %s\n' "$3" } selectargnum somefunc 2 3 "$@"
962 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 04:34:38.30 .net] ただ問題は、>>935 のコードを書いた俺自身が なんでこのコードで動くのかよく分かってない所だなw 誰か俺の書いたコードが何をやってるのか教えてくれw >>928 のコードはなにやら引数を一周させているみたいだ。 俺が書いたコードは、その一周を途中で中断させているようだな?
963 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 04:37:45.65 .net] eval使ったほうが簡潔かつ速い気がしてきたw set -- の所、何度も引数をずらす処理をしているわけだしね。
964 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 04:38:19.15 .net] 長い 読む気にならん
965 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 04:39:32.30 .net] 長くて読まないのはわかるが、 なぜ読まないということをわざわざ宣言するんだろう?
966 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 04:42:04.26 .net] まあ長いのは、>>929 のコードに合わせたからであって、 メインの処理はこれだけなんだけどね i=0 start=2 length=3 last=$((start+length)) for arg in "$@"; do : $((i+=1)) [ $i -gt $length ] && shift [ $i -ge $last ] && continue shift set -- "$@" "$arg" done printf '1: %s\n' "$1" printf '2: %s\n' "$2" printf '3: %s\n' "$3"
967 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 05:49:25.62 .net] >>935 ちょっとリファクタリング(ってほど大層じゃないが) selectargnum() { func="$1"; start=$2; length=$3 shift 3 i=0; last=$((start + length)) for arg in "$@"; do i=$((i + 1)) test ${i} -gt ${length} && shift test ${i} -ge ${last} && continue shift set -- "$@" "${arg}" done "${func}" "${@}" }
968 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 06:31:02.21 .net] >>941 文字増やしてるだけじゃねーかw
969 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 06:31:17.96 .net] 不要な文字
970 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 06:50:55.78 .net] リファクタリングは文字数減らすことを言うのじゃないけど
971 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 07:41:52.01 .net] 不必要な機能
972 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 09:41:05.71 .net] 一旦SQLiteにでも格納すれば何でも出来るで
973 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 12:57:05.87 .net] なんか余計に読みづらくなっただけのような
974 名前:名無しさん@お腹いっぱい。 [2018/05/03(木) 13:11:25.55 .net] 解こうとしてる問題が間違っていると言ったやろw
975 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 13:13:23.38 .net] bashだと簡単にできるようになったことのどこが 間違っているというのだろうか?
976 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 13:14:48.71 .net] >>944 > リファクタリングは文字数減らすことを言うのじゃないけど リファクタリングは文字数を増やすことじゃないって話
977 名前:名無しさん@お腹いっぱい。 [2018/05/03(木) 13:16:44.77 .net] >>949 問題が間違っているとハッキリ書いとるやろwアホなん?
978 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 13:17:25.13 .net] なぜ問題が間違っているというのか? 結論を最初に持ってこないように
979 名前:名無しさん@お腹いっぱい。 [2018/05/03(木) 13:22:50.10 .net] >>952 あ、それが分からんのかw 引数の意味をパースすれば任意の位置指定でのスライスなど不要やからな つまりgetoptで十分な問題を間違った角度から解こうとしとるっつー事やw てかおまえ安価ぐらいできんのか
980 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 13:33:39.18 .net] どういう理屈で、引数の意味をパースすれば任意の位置指定での スライスなど不要になるのでしょうか?
981 名前:名無しさん@お腹いっぱい。 [2018/05/03(木) 13:41:59.15 .net] >>954 まず安価しろ
982 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 13:43:07.07 .net] 例えばfindコマンドのように find . -type f -exec chmod 600 {} \; -execが来たら、chmodコマンドを;までをオプションとして 渡して実行みたいなのはスライス相当のものがないとできませんね
983 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 13:44:07.01 .net] 自分がやったことがないことだからって 問題が間違ってるということにはなりませんよ
984 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 13:44:46.06 .net] >>953 根本的に何がしたいのかに依るんじゃねーのそれは 引数を解釈したいならgetoptでやるべきだが、今回やりたいのは引数のスライスそのものじゃね? bashなら一行でできるそれをbash依存せずにやるにはどうすればって話なんじゃないか まぁなんか妙なのが湧いてて話が無駄に複雑になってる感が否めないが
985 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 13:47:13.94 .net] まあ言わないでもわかるでしょうが、 わざとスルーされないように言っておきますと、 -execは残りの引数を全て、指定したコマンドの引数として実行するものではなく ; までを引数とします。だから以下のように複数の-execもしていできます。 find . -type f -exec echo {} \; -exec echo {} \;
986 名前:名無しさん@お腹いっぱい。 [2018/05/03(木) 13:53:29.10 .net] >>958 位置が固定ならいきなりスライスでも構わんが 今回のやつは任意の位置を指定したいと言っとるやろ つまりその任意の位置がどこか分かった時点で引数の解析は終わっとるから 必要な引数も選別できているはずなんや つまりそこからさらに位置指定でスライスしたいというのは 引数解析のアプローチが間違っとるいう訳やな
987 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 14:10:06.58 .net] >>960 そして、その選別した引数(複数)を別の関数に渡すんだろ? 配列があれば、配列に選別していった引数を入れていけばいいだろうが bash依存しないなら、配列は使えないよな。 お前ならどうするんだ?
988 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 14:10:06.74 .net] >>960 任意の位置をどう指定するのかが要望ないからそこは>>922 みたいな位置の直書きを想定してた 多分位置の指定まで引数に組み込むような汎用性高いものは要求されてないだろう つまりいきなりスライスでいいと思ってる
989 名前:名無しさん@お腹いっぱい。 [2018/05/03(木) 14:17:44.04 .net] >>961-962 関数に渡すならその引数に割り当てた変数に保存しとくだけやな 可変個ならevalするやろしw どっちにしろもっと多くの状況がわからんと最適解は得られんわw
990 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 14:21:33.10 .net] >>963 > 関数に渡すならその引数に割り当てた変数に保存しとくだけやな >>917 を読み返してみましょうか? > 引数 $1 $2 $3 ・・・ のうち、特定の範囲n〜mを > 別の関数の引数に渡すのってどうやればいいだろうか? > n〜mは条件で変わるものとする その引数に割り当てた変数とはなんですか? 結局↓これですか? > 934 自分:名無しさん@お腹いっぱい。[sage] 投稿日:2018/05/03(木) 04:37:45.65 > eval使ったほうが簡潔かつ速い気がしてきたw
991 名前:名無しさん@お腹いっぱい。 [2018/05/03(木) 14:22:57.28 .net] >>964 せやでw こいつは問題を複雑に考えすぎとるだけやw
992 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 14:23:53.17 .net] あれほど問題が間違っていると偉そうなこと言ったくせに 問題は間違ってないってことでいいんだろうな
993 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 14:24:26.11 .net] >>965 そっちじゃない。 いきなり問題が間違っているといちゃもんを付けたことに 謝れって言ってる
994 名前:名無しさん@お腹いっぱい。 [2018/05/03(木) 14:25:12.82 .net] >>966 正確には問題自体を複雑に考えすぎとるやなw こいつの問題設定自体が間違っとるんやw
995 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 14:25:16.94 .net] >>963 > どっちにしろもっと多くの状況がわからんと最適解は得られんわw 最初の質問の>>917 に全て書かれてるじゃん 他に何の状況が知りたいのさ?
996 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 14:26:18.22 .net] >>968 なんで問題設定に話をすり替えてるの? 問題は>>917 。問題が間違ってるといちゃもんを付けたのは>>918
997 名前:名無しさん@お腹いっぱい。 [2018/05/03(木) 14:26:43.00 .net] >>967 なんやおまえ質問した本人なんかw ならもっと情報をさらけだしてみw おにいちゃん達が手取り足取り教えてあげるやろからw
998 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 14:28:32.21 .net] >>971 なんだお前が問題が間違ってるといちゃもんつけたやつか? 問題は間違っていませんでした、ごめんなさいって謝れば?
999 名前:名無しさん@お腹いっぱい。 [2018/05/03(木) 14:29:43.06 .net] >>972 せやでw てか教えて欲しいくせに何いきなりキレとんねんw キチガイかおまえはw
1000 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 14:32:04.43 .net] はぁ?教えてもらうも何も>>935 で自力で解いたし >>937 でeval使ったほうが良いかもって、 それは最初からわかってるよアピール(笑)もしたし お前はなにか役に立ったのか? 俺に問題が間違ってるといちゃもんを付けた挙げ句 結局、俺の足元にも及んでないじゃんw
1001 名前:名無しさん@お腹いっぱい。 [2018/05/03(木) 14:34:28.22 .net] >>974 だからな? もう少し柔軟なアタマと経験を持っとればそんな問題自体にぶちあたらんと言っとるのやでおいちゃんはw 人に教えてもらいたかったらもう少し素直になった方がええでおまえw
1002 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 14:38:23.58 .net] >>975 お前に経験がないから問題にぶち当たってないんだろうw それで、お前質問に答えずに逃げてるよな? >>960 そして、その選別した引数(複数)を別の関数に渡すんだろ? 配列があれば、配列に選別していった引数を入れていけばいいだろうが bash依存しないなら、配列は使えないよな。 お前ならどうするんだ?
1003 名前:名無しさん@お腹いっぱい。 [2018/05/03(木) 14:40:51.17 .net] >>976 いくらお子ちゃまでもナチュラルに話がループするバカにつきあう気はないで生憎w
1004 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 14:40:58.71 .net] 偉そうに>>960 で引数の選別をする方法で できるような言い方をしているということは、 "このやり方の続き" でやる方法も当然思いついてるはず 質問に答えようか。 まさかここまでいって、この方法じゃ実現不可能だった なんていうはずがないよなw
1005 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 15:39:01.57 .net] やたらめったに長ったらしいコード書いたアホが元凶
1006 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 15:57:16.13 .net] たしかに俺のコードは長すぎたし引数に改行が含まれると各行を引数だと見做してしまう 修正が困難な不具合があるからね(もし可能だという方がいるなら是非教えてほしい)。 実は俺自身もシェルスクリプトの経験はあまりないんだ。まだ仕事してねーし。 それが原因で場が乱れたとするなら申し訳ない。 ただ、言わせてもらうが、俺は寧ろ荒れた原因は「問題が間違ってる; 質問は正しい態度で」なんていう 主張をageながら口説いてる奴にあると思うがな。
1007 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 16:20:04.93 .net] どっちもはしゃぎ過ぎ それに、安価だのageだの馬鹿みたい
1008 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 16:29:15.75 .net] >>980 いや、だから>>935 で自力で解いたってw eval使ったほうが良さそうだけど (ここまで自力の結論というかeval版は質問前に作っていたがね)
1009 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 16:29:46.34 .net] >>981 > それに、安価だのageだの馬鹿みたい まったくだw 俺も最初からその2つは無視してるw
1010 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 16:31:30.06 .net] IDが出ないスレでこれほど見難い言い争いはあんま見ないな。いや醜いかw
1011 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 16:41:10.54 .net] ここって建設的じゃないよな、ホント
1012 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 17:10:05.54 .net] 自力で解いたっつてんだろ、何度も。偉ぶってんのはどっちなんだか。
1013 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 17:33:34.69 .net] 醜すぎw
1014 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 17:54:41.55 .net] はい、次スレ シェルスクリプト総合 その27 https://mevius.5ch.net/test/read.cgi/unix/1525337663/
1015 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 19:24:32.42 .net] この人は問題を解きたいんじゃなくて 問題を自分のルールで解かせたいだけなんだと思う
1016 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 19:33:59.23 .net] 自分のルールってなんのことや?
1017 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 20:13:25.91 .net] そうじゃなくて呈示されたコードの完成度が低くて、かつ 自分で作ったコードが要件を満たしていたから「お前ら馬鹿ばっかだな」になるんでしょう?
1018 名前:名無しさん@お腹いっぱい。 [2018/05/03(木) 20:15:23.07 .net] ただのお子ちゃまやないかw 間違っとる言われてボクは間違ってないてすねとるだけやでw
1019 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 20:27:22.30 .net] >>991 要件じゃなくて、あれはバグだよ 正しく動いてないじゃないか
1020 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 20:28:19.18 .net] いまいち誰が誰だかなわからない追うのめんどくさすぎなのに、論評続けるねえ 質問内容に文句つけ続けのオッサン:一理あるが、一理でしかない。しつこいわっ 質問したヤツ:自力で解いたとかウザいわ。だったら最初から質問すんなwおっさんの一理を理解して素直に受け取れ
1021 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 20:37:05.47 .net] >自力で解いたとかウザいわ。だったら最初から質問すんなw 書いた途端に解が分かったとかザラにあるだろ お騒がせしました、とか書けない人格はアレだけど
1022 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 20:38:34.10 .net] >>995 一行目は問題にしてない、全く。言う通りだし 二行目を問題にしてる、ほぼそれが全部
1023 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 20:58:18.53 .net] 能力はありそうに見えるのにもったいないよね。ああいうので仕事を失しなうってのは。 俺の同僚にも居たわ。正直に言って、俺より優秀だった
1024 名前:フに人当たりが強すぎてやんわり退職させられて 先月会ったらトビやりながら独学でコーディングしてるらしい [] [ここ壊れてます]
1025 名前:名無しさん@お腹いっぱい。 [2018/05/05(土) 15:07:28.61 .net] すいません。すごく細かいことなんですが、 シェルの変数に関する展開で、 ${somevar:-otherstring} という、somevarに変数が格納されていなればotherstringを変数の値として採用するという仕組みがありますよね。 ここにコマンド展開が使えるということに最近気がつきました。 ${somevar:-$(somecommand)} これは、展開の順序としては I. コマンド展開→変数の展開 somecommandがresultを返し、${somevar:-result}になってresultが展開される のか、 II. 変数の展開→コマンド展開 ${somevar:-$(somecommand)}が$(somecommand)になってresultが返る のか、 どちらか分かりますか? ぶっちゃけ、この違いが影響するような状況に遭遇したことがないのですが、よりよいシェルスクリプトの理解の為にどうかよろしくおねがいします。
1026 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/05(土) 15:36:58.33 .net] IIなんじゃねーの(鼻くそホジホジ)
1027 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/05(土) 23:01:08.19 .net] somecommandを副作用のあるコマンド(touchとかrmとか)にしでsomevarがある状態とない状態でそれぞれどうなるか比べてみればいい。たぶんIIだと思うが。
1028 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/06(日) 01:02:57.40 .net] >>1000 おぉう。そんな手があったとは。勉強になります。 おっしゃる通りIIでした。 somevarに変数が格納されている時、somecommandは実行されませんでした。
1029 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/06(日) 10:46:14.65 .net] echo 999
1030 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/06(日) 10:46:54.81 .net] exit 1000
1031 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 411日 22時間 39分 28秒
1032 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています