18/03/29 13:26:26.64 .net
>>781はxargsが\0扱えることも知らなそうw
804:名無しさん@お腹いっぱい。
18/03/29 13:30:47.80 .net
これだけヒント書いてるのに、いまだに
「そのままの形だと read で扱えない」
と
「sh だとできない」
が等価だと主張しているのは、アホの子なのか、
煽れば答を教えてもらえると期待しているのか、
どっちなんだろうね。
805:名無しさん@お腹いっぱい。
18/03/29 13:36:00.29 .net
>>783
POSIX の xargs に -0 オプションは規定されてないので、
「ポータブル」という条件下ではできない。
まあ POSIX の find に -print0 オプションが入ったのもわりと最近なので、
そのうち xargs でも待ってればそのうち -0 が追加されるとは思うが。
806:名無しさん@お腹いっぱい。
18/03/29 13:39:13.18 .net
答えはfor in * を使うこと
俺が代わりに答えておいてやるよ
なおshで\0を使うと言う答えではない
807:名無しさん@お腹いっぱい。
18/03/29 13:41:04.45 .net
POSIXはprint0に対応する前に
ファイル名に制御文字を使用できないようにしろ
808:名無しさん@お腹いっぱい。
18/03/29 13:53:52.47 .net
賛成
809:名無しさん@お腹いっぱい。
18/03/29 14:01:21.67 .net
for使ってfindっぽいものを自作したとして
それをパイプで別コマンドに流そうとした時に
またファイル名に改行が含まれていた時問題が発生するんだよな
810:名無しさん@お腹いっぱい。
18/03/29 15:15:24.81 .net
for で書くのなら、その結果のファイル名をわざわざ
他のプロセスにパイプで渡すなんてことはせずに、
そのシェル自身で処理するか、
あるいは他のプロセスに渡すなら引数を使え
ってだけの話だな。
>>764 が既に書いてる話なのに、なんでそこから
35コメも無駄に費やされてるんだか。
811:名無しさん@お腹いっぱい。
18/03/29 15:18:45.25 .net
ちなみに for で書く以外のやりかたもあるけど、
これも >>764 が既に最後の文で書いてる。
812:名無しさん@お腹いっぱい。
18/03/29 15:30:33.97 .net
posixの範囲じゃ改行が含まれたファイル名を
パイプでつなげられないってことかな
813:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/03/29 16:20:44.05 .net
でも、find -exec じゃシェル関数に渡せないからなぁ
findは諦めろってことかな
815:名無しさん@お腹いっぱい。
18/03/29 16:44:16.87 .net
find を諦めるんじゃくて、シェル関数の方をあきらめて、独立したシェルスクリプトにしろってことだよ。
find -exec コマンド {} \;
だとコマンドの起動回数が多いからシェルスクリプトにすると遅いのが問題になるけど、
find -exec コマンド {} +
ならコマンド起動回数は相当に減るから、独立したシェルスクリプトにしても特に問題はない。
816:名無しさん@お腹いっぱい。
18/03/29 21:07:16.05 .net
AWKの区切り記号をヌル文字にすればいいんでは。
817:名無しさん@お腹いっぱい。
18/03/29 23:50:16.88 .net
ぬるぽ?
818:名無しさん@お腹いっぱい。
18/03/30 00:19:50.52 .net
>>796
試してみたけどね。RSに\0入れられなくてね
もう全滅w
819:名無しさん@お腹いっぱい。
18/03/30 02:47:00.90 .net
>>798
俺の所では通ったけど、もしかしてOS依存なのかな。
@Debian GNU/Linux
820:名無しさん@お腹いっぱい。
18/03/30 03:18:23.09 .net
OSっていうかGNU系かどうかだね
GNU系はだいたい\0に対応している
BSD系とかは対応してない。だからMacとかつらい
私的なスクリプトならMacのコマンドをGNU化するやつ
入れて済ませても良いんだが
821:名無しさん@お腹いっぱい。
18/03/30 12:29:37.47 .net
>>795
バカwww
822:名無しさん@お腹いっぱい。
18/03/30 12:30:43.62 .net
このスレでこんなに草を見るとは思わなかった
823:名無しさん@お腹いっぱい。
18/03/30 13:42:54.12 .net
シェル関数にこだわる理由が思いつかん。
824:名無しさん@お腹いっぱい。
18/03/30 15:22:07.88 .net
そこにシェルスクリプトがあるから、的な何かかな?
825:名無しさん@お腹いっぱい。
18/03/30 15:47:33.25 .net
コンパイルせずに実行できる(実質)唯一の共通規格言語だからじゃないの?
PythonとかはPOSIXの範囲外だからどこでも動くとは限らないし。
え? UNIX™なのにPOSIXと齟齬ありまくりの実装のAIXちゃん? 知らない子ですねぇ……。
826:名無しさん@お腹いっぱい。
18/03/30 16:25:04.06 .net
localみたいにPOSIXじゃないけどだいたい
使えるってもの他にあったら教えて📡
827:名無しさん@お腹いっぱい。
18/03/30 16:38:24.19 .net
AIXはマジでどうにかして欲しい
seqすらないの本当に面倒臭い
828:名無しさん@お腹いっぱい。
18/03/30 17:03:19.85 .net
AIX案件なんてあるの?
829:名無しさん@お腹いっぱい。
18/03/30 17:23:17.72 .net
俺が行ってる現場だと1年くらい前までは現役でPowerでAIXを使ってたよ。
今はRedHatにリプレースされちゃったけど……そんなに嫌いではなかった。
>>807
jotも無かったっけ?
830:名無しさん@お腹いっぱい。
18/03/30 17:29:23.50 .net
うちは親会社モニョモニョだから結構AIXが多くて嫌になる
>>809
手元のやつだとないな。AIX7.1だけど
831:名無しさん@お腹いっぱい。
18/03/30 20:26:28.33 .net
>>804 >>805
それならシェル関数ではなく普通のシェルスクリプトでもいいだろう。
>>794 は単なるシェルスクリプトではなくシェル関数の利用にこだわってて謎。
832:名無しさん@お腹いっぱい。
18/03/30 20:31:30.33 .net
シェル函数って
somefunc() {
echo "This is somefunc."
}
っていうやつでしょ?
>>794はそういう意味で使ったんじゃない可能性が出てきたな。
単に「パイプに渡せない」というような趣旨の要望を言いたかったのかもしれん。
833:名無しさん@お腹いっぱい。
18/03/30 20:47:44.46 .net
>>812
たぶん find の -exec のとこに書けないって意味で書いてるだろうから、
シェルスクリプトじゃなくてシェル関数だと思う。
834:名無しさん@お腹いっぱい。
18/03/30 20:54:31.32 .net
たとえパイプ経由でファイル名を渡せないって意味だったとしても、
find -exec でそれと同一機能が実現できるならそ別にいいじゃん。
>>794が find -exec の何を気に入らないのかやっぱり分からんな。
835:名無しさん@お腹いっぱい。
18/03/30 21:02:32.72 .net
まぁでも「気に入らない」ってのは十分不採用の理由にはなるよな
836:名無しさん@お腹いっぱい。
18/03/30 21:09:13.58 .net
趣味なら理由になるかもなあ。
でも仕事じゃ理由にならん。
要件を満たしてるってのは仕事じゃ最低限度の基準だからな。
POSIXに適合するシェルスクリプトにしたいっていう要件が最初に出てるのに、
趣味に合わないから採用しない、仕方ないから実装を諦めるなんて奴がいたら、
仕事なら無能扱いだよ。
837:名無しさん@お腹いっぱい。
18/03/30 21:13:23.18 .net
そりゃ仕事と趣味は別だろ
何を当たり前の話をしてるんだ
838:名無しさん@お腹いっぱい。
18/03/30 21:31:21.92 .net
いや、あの謎のこだわりに合理的な理由があるのか、
それともホントに完全に趣味だけの話なのかが気になってたんだよ。
合理的理由ナシ、完全に個人の趣味ってことでFAなら、それでいいんだスマン。
839:名無しさん@お腹いっぱい。
18/03/31 00:46:42.95 .net
合理的じゃないけど合理主義だよね
840:名無しさん@お腹いっぱい。
18/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
18/03/31 01:41:51.42 .net
やべぇ、このaliasの使い方、
めちゃくちゃ強力じゃないか?
文法の拡張が可能かもしれない
こんな所でネタにするレベルじゃないわ
842:817
18/03/31 02:06
843::02.61 .net
844:名無しさん@お腹いっぱい。
18/03/31 02:30:40.57 .net
そもそもaliasってシェルスクリプトの中で使えたっけ。
俺の環境では使えたけども
845:名無しさん@お腹いっぱい。
18/03/31 02:48:01.26 .net
>>823
bashとかだとデフォルトでは無効
expand_aliasesを使えば有効にできる
ただ>>820の挙動が全てのシェルで同じなのかは調べてない
aliasの挙動をちゃんと把握してはないけど
どうやら行単位で実行前に、単純な文字列置換が行われてる感じだね
だからevalでもできないスクリプトの自己書き換えみたいなことができちゃう
参考(ちゃんと読んではいないw)
URLリンク(magicant.txt-nifty.com)
846:名無しさん@お腹いっぱい。
18/03/31 02:57:08.73 .net
AIXの人はseqってどうやって代用してる?
847:名無しさん@お腹いっぱい。
18/03/31 09:20:43.88 .net
awkでチョチョイでは?
848:名無しさん@お腹いっぱい。
18/03/31 22:32:30.06 .net
みんな、変わった(?)の使ってるな。
Linux、BSD、Solarisなどのメジャーなもの以外で何がよく使われてるの?
849:名無しさん@お腹いっぱい。
18/03/31 22:52:09.24 .net
Mac
850:名無しさん@お腹いっぱい。
18/04/01 01:13:29.58 .net
MacはBSD系ってことでまとめましょうw
851:名無しさん@お腹いっぱい。
18/04/02 07:41:52.65 .net
$ man basename > man_basenam
でできるファイルを
emacsとテキストエディットで開いたものが次のものです。
URLリンク(imgur.com)
これはそういう仕様なのでしょうか?文字化けというか不思議な
コードになっています。できれば教えていただけないでしょうか
852:名無しさん@お腹いっぱい。
18/04/02 08:19:02.96 .net
URLリンク(surf.ml.seikei.ac.jp)
バックスペースとアンダースコアがない プレーンテキスト版の man ページを得るには、コマンド
# man foo | col -b > foo.mantxt
を実行すること。
853:名無しさん@お腹いっぱい。
18/04/02 08:25:59.92 .net
>>830
man エスケープシークエンス
で検索。
854:名無しさん@お腹いっぱい。
18/04/02 10:28:43.52 .net
man manすればいい
TIPSに載ってる
855:名無しさん@お腹いっぱい。
18/04/02 14:17:49.92 .net
あと、emacs に限って言うと
M-x man
(ESC x man リターン)
と叩いて、man のエントリー名を入れれば、
きっちり整形した結果を表示してくれるから、
col -b を使う必要はあまりない。
856:名無しさん@お腹いっぱい。
18/04/02 18:03:58.27 .net
>>825
ググってみたらこんな方法があったよ。
↓
yes '' | cat -n | head -100 | sed 's/ //g'
857:名無しさん@お腹いっぱい。
18/04/02 18:24:12.37 .net
yesはなんか処理間違えると止まらなくなりそうで怖いんだよな
858:名無しさん@お腹いっぱい。
18/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: URLリンク(pubs.opengroup.org)
859:名無しさん@お腹いっぱい。
18/04/02 21:07:04.97 .net
$ yes '' | nl -b a | head -n 10 | tr -d ' \t' | tr '\n' ' '
修正。もっと簡単にできるわww
860:834
18/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:名無しさん@お腹いっぱい。
18/04/02 21:41:13.89 .net
並行して動くか、出力の完了を待ってから動くかの違いだろ
863:名無しさん@お腹いっぱい。
18/04/02 23:47:22.15 .net
パイプで繋いでプロセス4つも5つも上げるくらいなら、
素直にawk 1プロセスですませた方が軽くないか?
864:836
18/04/02 23:56:24.81 .net
>>841
俺awkできないんだわ。恥かしいことにw
そのうち勉強しようしようと思っていて今にいたる。
awkでやるとどんな感じになる?
865:836
18/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:名無しさん@お腹いっぱい。
18/04/03 00:40:30.08 .net
awk 'BEGIN {for(i=10;i<=20;i++) printf "%d\n",i}'
867:名無しさん@お腹いっぱい。
18/04/03 01:08:09.19 .net
yes '' | sed -n '=;10q'
868:名無しさん@お腹いっぱい。
18/04/03 14:22:10.27 .net
sedでやるとは
869:名無しさん@お腹いっぱい。
18/04/03 18:22:16.97 .net
何かゴルフっぽくなってきてるw
>>845
これ凄いね!
870:名無しさん@お腹いっぱい。
18/04/03 18:57:15.26 .net
sedって計算完備なんだっけ。
やろうと思えばsed単体でseq作れるよね
871:名無しさん@お腹いっぱい。
18/04/03 19:03:30.37 .net
sedでlispを作った人はいる
872:名無しさん@お腹いっぱい。
18/04/03 19:33:57.64 .net
どうかしてるぜ
873:名無しさん@お腹いっぱい。
18/04/03 22:20:55.54 .net
>>845
使うことないだろうけど感動した
874:名無しさん@お腹いっぱい。
18/04/03 23:45:32.30 .net
そんなことより野球やろうぜ
875:名無しさん@お腹いっぱい。
18/04/04 07:05:11.03 .net
>>848
> sedって計算完備なんだっけ。
URLリンク(www.catonmat.net)
876:名無しさん@お腹いっぱい。
18/04/05 00:02:39.79 .net
家具家電彼女完備の家に住みたい
877:名無しさん@お腹いっぱい。
18/04/05 02:42:14.79 .net
sinyabin.shの中でradiru.shを実行しています。
sinyabin.shの中の変数をradiru.shに引き継ぎたいんですが、どう書けばいいんでしょうか?
878:852
18/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
18/04/05 03:41:17.05 .net
radiru.shはaacのダウンロードだけにして、
Pushbulettへの通知、l-smash、Dropboxなどはsinyabin.shの方に書いたほうがいいんでしょうか?
そうすれば、ちょっと録音したいと思ったときいちいち番組毎のスクリプトをつくりその中にIDタグなど細かく書かなくてもすむから楽かなと。
でもそれだと、番組毎のスクリプトに「Pushbulettへの通知、l-smash、Dropbox」といったコマンドを書かないといけないので無駄かなあとも思いました。
どういうフローがいいと思いますか?
880:名無しさん@お腹いっぱい。
18/04/05 10:10:37.31 .net
export すりゃいいんじゃない
881:名無しさん@お腹いっぱい。
18/04/05 10:22:06.60 .net
こう質問の仕方が下手だと答える気失せるな
変数外に出せばいい�
882:セけ
883:名無しさん@お腹いっぱい。
18/04/05 10:59:32.39 .net
852だけで良かったのにね
884:名無しさん@お腹いっぱい。
18/04/05 13:53:42.01 .net
プログラミング素人っぽいし、加減がわかってないだろうから、
情報が多すぎる方は不問にした方が。
足りないよりは多すぎる方がずっとマシ。
885:名無しさん@お腹いっぱい。
18/04/05 18:12:51.21 .net
>>856
radiru.sh に引数でタグ情報を渡せばいいと思いますが。
886:名無しさん@お腹いっぱい。
18/04/12 09:36:41.69 .net
bashだと$LINENOでファイルの中での現在の行数が取得できるのですが、
dashやzshだと関数の中にいる時、関数のはじめからの行数になってしまいます。
どうにかして現在の行数を取得する方法はないでしょうか?
887:名無しさん@お腹いっぱい。
18/04/13 19:02:57.86 .net
zshよくしらんけど、関数定義の手前の行番号を
変数にでも取っといて足し算すりゃいいんじゃね?
888:名無しさん@お腹いっぱい。
18/04/13 19:07:33.88 .net
まぁやりようは如何様にでもあるんだろうが、
ニュアンス的に$LINENO並の手軽さで取得する手段はないかってことじゃね
俺は知らん
889:名無しさん@お腹いっぱい。
18/04/13 22:14:56.99 .net
$LINENOってどういう使い方を想定して作ったんだろうね
890:名無しさん@お腹いっぱい。
18/04/13 22:51:23.99 .net
どこを見ればPOSIXシェルスクリプトの確かな仕様に出会えるのか知らないけど、
ググって出てきたこれにはLINENO書いてあるな。
User Portability Utilities optionが必要みたいだけど、なにそれ?
URLリンク(pubs.opengroup.org)
891:名無しさん@お腹いっぱい。
18/04/13 23:40:07.60 .net
実装オプションにつけてあるIDコードの一つみたいだな。
コードの一覧は
URLリンク(pubs.opengroup.org)
にある。
オプション機能なので、実装されてるとは限らない。
892:名無しさん@お腹いっぱい。
18/04/14 00:40:09.23 .net
LINENOが仕様どおりに実装されてないのは
この際見なかったことにして、現在使われてる
POSIX準拠シェルで完全に実装されてないものなんて有るの?
そもそも現在使われてるPOSIX準拠シェルってどんなのがあるんだろう
bash、ash、dash、zsh、ksh、mksh、yash、posh
他に知ってる?
893:名無しさん@お腹いっぱい。
18/04/14 16:31:32.55 .net
$LINENO使って何をしたいんだろ
894:名無しさん@お腹いっぱい。
18/04/14 19:01:06.26 .net
デバッグログ以外になにかあんの?
だからこそデバッグログとして使えない
$LINENOを何のために作ったのか理解できない
895:名無しさん@お腹いっぱい。
18/04/14 19:14:03.26 .net
${(%):-%I}
896:名無しさん@お腹いっぱい。
18/04/14 20:10:19.92 .net
$ ${(%):-%I}
-bash: ${(%):-%I}: 誤った代入です
897:名無しさん@お腹いっぱい。
18/04/17 22:14:01.26 .net
URLリンク(ja.wikipedia.org)
> ^ Bourne Shellのソースコード( URLリンク(minnie.tuhs.org) )は
> マクロ( URLリンク(minnie.tuhs.org) )を使用した
> 「ALGOLのような見た目のC」で書かれていることで悪名高い
898:名無しさん@お腹いっぱい。
18/04/18 10:39:06.43 .net
自己解凍するファイルって便利だな
シェルスクリプトで解凍とインストール手順を記述して
それをバイナリと結合するだけでmsiみたいなことができる
899:名無しさん@お腹いっぱい。
18/04/18 15:04:27.31 .net
>>875
それはちなみに sh アーカイブ形式って呼び名がついてる。
sharっていう自己解凍シェルスクリプト作成専用コマンドも昔はあった。
なお、ウイルスやマルウェアの温床だということで廃れた模様。
900:名無しさん@お腹いっぱい。
18/04/18 15:22:26.44 .net
sharはそれでインストールまでするというより、tar.gz などのバイナリファイルを
テキストにしてメールやニュースで送るために使うことが多かった
901:名無しさん@お腹いっぱい。
18/04/18 16:21:07.45 .net
>>877
へー、uuencodeしか知らんかった
902:872
18/04/18 21:50:42.61 .net
あーわりと昔からある手法なのね……
VMware Horizon Clientのインストールイメージがその形で,俺は正直そういうシェルスクリプトとバイナリが結合されてるファイルを始めて触ったんで
画期的なアイデアに思えたんだわ……
903:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/04/19 00:06:08.07 .net
>>880
コマンド置換 $(...) の仕様
URLリンク(pubs.opengroup.org)
> 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のマニュアルにも同様の記述がある
URLリンク(linuxjm.osdn.jp)
> bash は command を実行し、 command の標準出力でコマンド置換の部分を
> 置き換えます。この際、末尾の改行文字は削除されます。 文字列の途中に
> ある改行文字は削除されませんが、 単語分割の際に削除されることがあり
> ます。
906:名無しさん@お腹いっぱい。
18/04/19 00:06:21.64 .net
かといってこうやると4バイトでてるんだよなー
printf '1\n\n\n' | hexdump.exe -C
907:名無しさん@お腹いっぱい。
18/04/19 00:19:37.42 .net
コマンド置換の仕様かぁ
普通のやり方ではコマンドの出力結果を変数に入れるときは
末尾の改行は絶対消えるってことかなー
read使えばって思ったけど、あっちは改行区切りだしなー
ちなみに $aに1\n\n\nを無理やり入れて、
$bに1を入れて [ "$a" = "$b" ] で比較したら不一致になったよ
908:名無しさん@お腹いっぱい。
18/04/19 00:24:31.94 .net
あたりまえやろw
909:名無しさん@お腹いっぱい。
18/04/19 00:54:10.53 .net
よくこんな単純なルールで辻褄取れてるよなー
思いつきで考えたとしか思えないルールなのにw
910:名無しさん@お腹いっぱい。
18/04/24 02:26:08.83 .net
単純なルールのほうが整合性は取りやすいんでは? 寧ろ複雑な規則だと実装に矛盾が生じたりしそう。
911:名無しさん@お腹いっぱい。
18/04/27 23:17:19.66 .net
ちょっと質問
偶数日と奇数日で処理を分けたいんだけど、上手くできない
どうしたら良いのかアドバイスください
#!/bin/sh
DATE=`date '+%d'` # 日 を取得
buf=$(( $DATE % 2 )) # 計算
if [ ! $buf ]; then # 偶数
hoge
else # 奇数
fuga
fi
912:名無しさん@お腹いっぱい。
18/04/27 23:43:49.55 .net
その計算するとこ()の中に$いるっけ
913:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/04/28 01:37:16.44 .net
BSDで標準コマンドだけで現在時刻(もしくは起動してからの)ミリ秒ってとれないのな
/proc/uptimeもBSDないみたいだしどうにかして取れないかなー
ファイルに書き込んでタイムスタンプで
取れないかなーとかもやってみたりもしたw
ファイルシステムによっては書き込まれるみたいだが
これも標準コマンドだけでどうやればー
できればなにも入ってない素のコマンドだけでやりたいんだよね
Perlでもやれるけど、dateコマンドに比べたら
起動時間が10倍も違うんだよな。
あ、ベンチマークというかコマンドの実行速度を細かく知りたいために使いたい。
timeコマンドは標準出力(エラーだっけ?)を乱すので使いたくない
916:名無しさん@お腹いっぱい。
18/04/28 01:49:17.29 .net
あれとれなかったっけ?
なんか取れた気がしたけど気のせいだったか
917:名無しさん@お腹いっぱい。
18/04/28 19:41:21.09 .net
>889-890
ありがとうできたよ。bufが空白になって常にelseに倒れてたから助かりました。
$の位置が良くわからなくて困っていたんだ
Cならいくらでも書けるんだけど、慣れない言語はちょとね・・・
918:名無しさん@お腹いっぱい。
18/04/28 20:34:44.86 .net
>>891
timeコマンドの出力は標準エラーだよ。
標準出力の方は乱さない。
標準エラーが乱れる方も
(time sh -c '測りたいコマンド 2>&3' 2>/tmp/time.out ) 3>&2
みたいにすれば回避できるから、素直に time コマンド使う方がいい。
919:名無しさん@お腹いっぱい。
18/04/28 23:27:39.64 .net
>>894
もう一つ問題があってなぁ。
dashじゃtimeコマンドビルトインじゃないんだよ
ビルトインじゃないからシェル関数で使えないんだよね
920:名無しさん@お腹いっぱい。
18/04/29 00:02:10.75 .net
まあ使えないわけじゃないし候補にはなるけど、
OSごとに処理分けるの嫌だなぁ
921:名無しさん@お腹いっぱい。
18/04/29 00:07:48.59 .net
/bin/timeって明示すれば?
922:名無しさん@お腹いっぱい。
18/04/29 02:10:30.87 .net
もしくは
command -p time
923:名無しさん@お腹いっぱい。
18/04/29 08:34:10.39 .net
いや、だからtimeコマンドだと
シェル関数扱えないからだめだって言ってるやん?
924:名無しさん@お腹いっぱい。
18/04/29 11:24:09.19 .net
放置で
925:名無しさん@お腹いっぱい。
18/04/29 18:50:59.66 .net
どうぞ
926:名無しさん@お腹いっぱい。
18/04/30 09:52:20.53 .net
mkfifo便利すぎる
927:名無しさん@お腹いっぱい。
18/04/30 10:17:56.64 .net
シェルスクリプトの入門書を教えてください
ソフトバンクから出てるUNIXシェルスクリプト~みたいな書名のものがAmazonでは評価高いみたいなんですが…
先輩方のおすすめを教えてください
928:名無しさん@お腹いっぱい。
18/04/30 14:27:06.11 .net
>>903
こういう分野に関してはいまだにオライリーは信頼できる書籍を発行してるぜ。
まあ俺の持論だがw
URLリンク(www.oreilly.co.jp)
↑これとか参考になる。コマンドの列挙だけじゃなく、システムとシェルの性質とか非常に基礎的な部分から触れてるのでよい(と思う)。
929:900
18/04/30 16:27:23.98 .net
>>904
>システムとシェルの性質とか
これ正に知りたいことです
連休中本屋さん行くので是非中身読んで検討します
ありがとうございます
930:名無しさん@お腹いっぱい。
18/05/02 16:02:31.91 .net
コマンドの出力結果を一時ファイルを作らずに
一行一変数に入れたいんですけどい
931:い方法はないでしょうか? 変数はLINE1、LINE2・・・みたいな名前で bash依存になる配列は使わない方針です。 foo | while read -r line; do LINE1=$line done みたいにするとサブシェルだから ループ終わると消えてしまうし
932:名無しさん@お腹いっぱい。
18/05/02 16:34:46.41 .net
sedかawkで代入文いっぱい出してevalかな。
特殊文字のエスケープちゃんと書かないといけないけど。
933:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/05/02 17:12:01.86 .net
> sedかawkで代入文いっぱい出してevalかな。
やっぱり残る手はそれか
937:名無しさん@お腹いっぱい。
18/05/02 17:18:49.70 .net
$ radico rec -id=FMT -s=20180502040000
というコマンドがあったとして、「-s=」あとに今日の朝4時「date +"%Y%m%d"040000」の結果を入れたいんですが、一行で書く方法を教えてください
938:名無しさん@お腹いっぱい。
18/05/02 17:28:29.77 .net
お前はこの前のレス群に対する結果とか報告してからにしろ
939:名無しさん@お腹いっぱい。
18/05/02 18:12:16.93 .net
何も考えずぶん投げるけど変数exportとかじゃだめなのか
940:名無しさん@お腹いっぱい。
18/05/02 18:28:09.05 .net
出来ました!
941:名無しさん@お腹いっぱい。
18/05/02 19:53:51.97 .net
>>912
$ radico rec -id=FMT -s=$(date "+%Y%m%d040000")
コマンド置換くらい自力で調べーや
942:名無しさん@お腹いっぱい。
18/05/02 21:09:33.58 .net
引数 $1 $2 $3 ・・・ のうち、特定の範囲n~mを
別の関数の引数に渡すのってどうやればいいだろうか?
n~mは条件で変わるものとする
943:名無しさん@お腹いっぱい。
18/05/02 21:27:56.41 .net
>>917
一兆個のシェルを書いてきた俺がそんな事必要になった事がないから
お前の解こうとしてる問題が間違っている
944:名無しさん@お腹いっぱい。
18/05/02 21:34:19.62 .net
>>918
やってることが簡単なパーサーのようなものですからね。
exprをシェルスクリプトで実装しているようなものです。
流石にこういう高度なことはやったことがないのでは?
945:名無しさん@お腹いっぱい。
18/05/02 22:27:50.67 .net
shift $argnum
とかは?
946:名無しさん@お腹いっぱい。
18/05/02 22:47:14.90 .net
>>920
それだと前からn個以降は実現可能だけど
範囲ができないんですよね。
947:名無しさん@お腹いっぱい。
18/05/02 22:51:49.30 .net
bashだとこんな感じですね
foo() { echo "${@:2:3}"; }
$ foo 1 2 3 4 5
2 3 4
948:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/05/03 00:50:36.20 .net
seqを除いてPOSIX準拠。
もしもより厳密にPOSIXに従いたければ当該箇所を
seq $((toargnum - fromargnum + 1))
から
yes | head -n $((toargnum - fromargnum + 1))
としてもいいだろう。
952:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/05/03 03:18:03.35 .net
eval使うしか無いっすかね?
954:名無しさん@お腹いっぱい。
18/05/03 03:20:16.97 .net
このコードの応用でできますかね?
いまいちこのコードがなにやってるのかよくわからんのですが
URLリンク(unix.stackexchange.com)
for arg do
shift
[ "$arg" = "-inf" ] && continue
set -- "$@" "$arg"
done
printf '%s\n' "$@"
955:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/05/03 04:23:43.87 .net
なんかすごいどうでもいいことしてる気にならん?
959:名無しさん@お腹いっぱい。
18/05/03 04:26:07.99 .net
しょうがないだろう。
引数には空白、シングルクォート、ダブルクォート、改行が
含まれる可能性があるんだよ
960:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/05/03 04:34:38.30 .net
ただ問題は、>>935のコードを書いた俺自身が
なんでこのコードで動くのかよく分かってない所だなw
誰か俺の書いたコードが何をやってるのか教えてくれw
>>928のコードはなにやら引数を一周させているみたいだ。
俺が書いたコードは、その一周を途中で中断させているようだな?
963:名無しさん@お腹いっぱい。
18/05/03 04:37:45.65 .net
eval使ったほうが簡潔かつ速い気がしてきたw
set -- の所、何度も引数をずらす処理をしているわけだしね。
964:名無しさん@お腹いっぱい。
18/05/03 04:38:19.15 .net
長い
読む気にならん
965:名無しさん@お腹いっぱい。
18/05/03 04:39:32.30 .net
長くて読まないのはわかるが、
なぜ読まないということをわざわざ宣言するんだろう?
966:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/05/03 06:31:02.21 .net
>>941
文字増やしてるだけじゃねーかw
969:名無しさん@お腹いっぱい。
18/05/03 06:31:17.96 .net
不要な文字
970:名無しさん@お腹いっぱい。
18/05/03 06:50:55.78 .net
リファクタリングは文字数減らすことを言うのじゃないけど
971:名無しさん@お腹いっぱい。
18/05/03 07:41:52.01 .net
不必要な機能
972:名無しさん@お腹いっぱい。
18/05/03 09:41:05.71 .net
一旦SQLiteにでも格納すれば何でも出来るで
973:名無しさん@お腹いっぱい。
18/05/03 12:57:05.87 .net
なんか余計に読みづらくなっただけのような
974:名無しさん@お腹いっぱい。
18/05/03 13:11:25.55 .net
解こうとしてる問題が間違っていると言ったやろw
975:名無しさん@お腹いっぱい。
18/05/03 13:13:23.38 .net
bashだと簡単にできるようになったことのどこが
間違っているというのだろうか?
976:名無しさん@お腹いっぱい。
18/05/03 13:14:48.71 .net
>>944
> リファクタリングは文字数減らすことを言うのじゃないけど
リファクタリングは文字数を増やすことじゃないって話
977:名無しさん@お腹いっぱい。
18/05/03 13:16:44.77 .net
>>949
問題が間違っているとハッキリ書いとるやろwアホなん?
978:名無しさん@お腹いっぱい。
18/05/03 13:17:25.13 .net
なぜ問題が間違っているというのか?
結論を最初に持ってこないように
979:名無しさん@お腹いっぱい。
18/05/03 13:22:50.10 .net
>>952
あ、それが分からんのかw
引数の意味をパースすれば任意の位置指定でのスライスなど不要やからな
つまりgetoptで十分な問題を間違った角度から解こうとしとるっつー事やw
てかおまえ安価ぐらいできんのか
980:名無しさん@お腹いっぱい。
18/05/03 13:33:39.18 .net
どういう理屈で、引数の意味をパースすれば任意の位置指定での
スライスなど不要になるのでしょうか?
981:名無しさん@お腹いっぱい。
18/05/03 13:41:59.15 .net
>>954
まず安価しろ
982:名無しさん@お腹いっぱい。
18/05/03 13:43:07.07 .net
例えばfindコマンドのように
find . -type f -exec chmod 600 {} \;
-execが来たら、chmodコマンドを;までをオプションとして
渡して実行みたいなのはスライス相当のものがないとできませんね
983:名無しさん@お腹いっぱい。
18/05/03 13:44:07.01 .net
自分がやったことがないことだからって
問題が間違ってるということにはなりませんよ
984:名無しさん@お腹いっぱい。
18/05/03 13:44:46.06 .net
>>953
根本的に何がしたいのかに依るんじゃねーのそれは
引数を解釈したいならgetoptでやるべきだが、今回やりたいのは引数のスライスそのものじゃね?
bashなら一行でできるそれをbash依存せずにやるにはどうすればって話なんじゃないか
まぁなんか妙なのが湧いてて話が無駄に複雑になってる感が否めないが
985:名無しさん@お腹いっぱい。
18/05/03 13:47:13.94 .net
まあ言わないでもわかるでしょうが、
わざとスルーされないように言っておきますと、
-execは残りの引数を全て、指定したコマンドの引数として実行するものではなく
; までを引数とします。だから以下のように複数の-execもしていできます。
find . -type f -exec echo {} \; -exec echo {} \;
986:名無しさん@お腹いっぱい。
18/05/03 13:53:29.10 .net
>>958
位置が固定ならいきなりスライスでも構わんが
今回のやつは任意の位置を指定したいと言っとるやろ
つまりその任意の位置がどこか分かった時点で引数の解析は終わっとるから
必要な引数も選別できているはずなんや
つまりそこからさらに位置指定でスライスしたいというのは
引数解析のアプローチが間違っとるいう訳やな
987:名無しさん@お腹いっぱい。
18/05/03 14:10:06.58 .net
>>960
そして、その選別した引数(複数)を別の関数に渡すんだろ?
配列があれば、配列に選別していった引数を入れていけばいいだろうが
bash依存しないなら、配列は使えないよな。
お前ならどうするんだ?
988:名無しさん@お腹いっぱい。
18/05/03 14:10:06.74 .net
>>960
任意の位置をどう指定するのかが要望ないからそこは>>922みたいな位置の直書きを想定してた
多分位置の指定まで引数に組み込むような汎用性高いものは要求されてないだろう
つまりいきなりスライスでいいと思ってる
989:名無しさん@お腹いっぱい。
18/05/03 14:17:44.04 .net
>>961-962
関数に渡すならその引数に割り当てた変数に保存しとくだけやな
可変個ならevalするやろしw
どっちにしろもっと多くの状況がわからんと最適解は得られんわw
990:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/05/03 14:22:57.28 .net
>>964
せやでw
こいつは問題を複雑に考えすぎとるだけやw
992:名無しさん@お腹いっぱい。
18/05/03 14:23:53.17 .net
あれほど問題が間違っていると偉そうなこと言ったくせに
問題は間違ってないってことでいいんだろうな
993:名無しさん@お腹いっぱい。
18/05/03 14:24:26.11 .net
>>965
そっちじゃない。
いきなり問題が間違っているといちゃもんを付けたことに
謝れって言ってる
994:名無しさん@お腹いっぱい。
18/05/03 14:25:12.82 .net
>>966
正確には問題自体を複雑に考えすぎとるやなw
こいつの問題設定自体が間違っとるんやw
995:名無しさん@お腹いっぱい。
18/05/03 14:25:16.94 .net
>>963
> どっちにしろもっと多くの状況がわからんと最適解は得られんわw
最初の質問の>>917に全て書かれてるじゃん
他に何の状況が知りたいのさ?
996:名無しさん@お腹いっぱい。
18/05/03 14:26:18.22 .net
>>968
なんで問題設定に話をすり替えてるの?
問題は>>917。問題が間違ってるといちゃもんを付けたのは>>918
997:名無しさん@お腹いっぱい。
18/05/03 14:26:43.00 .net
>>967
なんやおまえ質問した本人なんかw
ならもっと情報をさらけだしてみw
おにいちゃん達が手取り足取り教えてあげるやろからw
998:名無しさん@お腹いっぱい。
18/05/03 14:28:32.21 .net
>>971
なんだお前が問題が間違ってるといちゃもんつけたやつか?
問題は間違っていませんでした、ごめんなさいって謝れば?
999:名無しさん@お腹いっぱい。
18/05/03 14:29:43.06 .net
>>972
せやでw
てか教えて欲しいくせに何いきなりキレとんねんw
キチガイかおまえはw
1000:名無しさん@お腹いっぱい。
18/05/03 14:32:04.43 .net
はぁ?教えてもらうも何も>>935で自力で解いたし
>>937でeval使ったほうが良いかもって、
それは最初からわかってるよアピール(笑)もしたし
お前はなにか役に立ったのか?
俺に問題が間違ってるといちゃもんを付けた挙げ句
結局、俺の足元にも及んでないじゃんw
1001:名無しさん@お腹いっぱい。
18/05/03 14:34:28.22 .net
>>974
だからな?
もう少し柔軟なアタマと経験を持っとればそんな問題自体にぶちあたらんと言っとるのやでおいちゃんはw
人に教えてもらいたかったらもう少し素直になった方がええでおまえw
1002:名無しさん@お腹いっぱい。
18/05/03 14:38:23.58 .net
>>975
お前に経験がないから問題にぶち当たってないんだろうw
それで、お前質問に答えずに逃げてるよな?
>>960
そして、その選別した引数(複数)を別の関数に渡すんだろ?
配列があれば、配列に選別していった引数を入れていけばいいだろうが
bash依存しないなら、配列は使えないよな。
お前ならどうするんだ?
1003:名無しさん@お腹いっぱい。
18/05/03 14:40:51.17 .net
>>976
いくらお子ちゃまでもナチュラルに話がループするバカにつきあう気はないで生憎w
1004:名無しさん@お腹いっぱい。
18/05/03 14:40:58.71 .net
偉そうに>>960で引数の選別をする方法で
できるような言い方をしているということは、
"このやり方の続き" でやる方法も当然思いついてるはず
質問に答えようか。
まさかここまでいって、この方法じゃ実現不可能だった
なんていうはずがないよなw
1005:名無しさん@お腹いっぱい。
18/05/03 15:39:01.57 .net
やたらめったに長ったらしいコード書いたアホが元凶
1006:名無しさん@お腹いっぱい。
18/05/03 15:57:16.13 .net
たしかに俺のコードは長すぎたし引数に改行が含まれると各行を引数だと見做してしまう
修正が困難な不具合があるからね(もし可能だという方がいるなら是非教えてほしい)。
実は俺自身もシェルスクリプトの経験はあまりないんだ。まだ仕事してねーし。
それが原因で場が乱れたとするなら申し訳ない。
ただ、言わせてもらうが、俺は寧ろ荒れた原因は「問題が間違ってる; 質問は正しい態度で」なんていう
主張をageながら口説いてる奴にあると思うがな。
1007:名無しさん@お腹いっぱい。
18/05/03 16:20:04.93 .net
どっちもはしゃぎ過ぎ
それに、安価だのageだの馬鹿みたい
1008:名無しさん@お腹いっぱい。
18/05/03 16:29:15.75 .net
>>980
いや、だから>>935で自力で解いたってw
eval使ったほうが良さそうだけど
(ここまで自力の結論というかeval版は質問前に作っていたがね)
1009:名無しさん@お腹いっぱい。
18/05/03 16:29:46.34 .net
>>981
> それに、安価だのageだの馬鹿みたい
まったくだw 俺も最初からその2つは無視してるw
1010:名無しさん@お腹いっぱい。
18/05/03 16:31:30.06 .net
IDが出ないスレでこれほど見難い言い争いはあんま見ないな。いや醜いかw
1011:名無しさん@お腹いっぱい。
18/05/03 16:41:10.54 .net
ここって建設的じゃないよな、ホント
1012:名無しさん@お腹いっぱい。
18/05/03 17:10:05.54 .net
自力で解いたっつてんだろ、何度も。偉ぶってんのはどっちなんだか。
1013:名無しさん@お腹いっぱい。
18/05/03 17:33:34.69 .net
醜すぎw
1014:名無しさん@お腹いっぱい。
18/05/03 17:54:41.55 .net
はい、次スレ
シェルスクリプト総合 その27
スレリンク(unix板)
1015:名無しさん@お腹いっぱい。
18/05/03 19:24:32.42 .net
この人は問題を解きたいんじゃなくて
問題を自分のルールで解かせたいだけなんだと思う
1016:名無しさん@お腹いっぱい。
18/05/03 19:33:59.23 .net
自分のルールってなんのことや?
1017:名無しさん@お腹いっぱい。
18/05/03 20:13:25.91 .net
そうじゃなくて呈示されたコードの完成度が低くて、かつ
自分で作ったコードが要件を満たしていたから「お前ら馬鹿ばっかだな」になるんでしょう?
1018:名無しさん@お腹いっぱい。
18/05/03 20:15:23.07 .net
ただのお子ちゃまやないかw
間違っとる言われてボクは間違ってないてすねとるだけやでw
1019:名無しさん@お腹いっぱい。
18/05/03 20:27:22.30 .net
>>991
要件じゃなくて、あれはバグだよ
正しく動いてないじゃないか
1020:名無しさん@お腹いっぱい。
18/05/03 20:28:19.18 .net
いまいち誰が誰だかなわからない追うのめんどくさすぎなのに、論評続けるねえ
質問内容に文句つけ続けのオッサン:一理あるが、一理でしかない。しつこいわっ
質問したヤツ:自力で解いたとかウザいわ。だったら最初から質問すんなwおっさんの一理を理解して素直に受け取れ
1021:名無しさん@お腹いっぱい。
18/05/03 20:37:05.47 .net
>自力で解いたとかウザいわ。だったら最初から質問すんなw
書いた途端に解が分かったとかザラにあるだろ
お騒がせしました、とか書けない人格はアレだけど
1022:名無しさん@お腹いっぱい。
18/05/03 20:38:34.10 .net
>>995
一行目は問題にしてない、全く。言う通りだし
二行目を問題にしてる、ほぼそれが全部
1023:名無しさん@お腹いっぱい。
18/05/03 20:58:18.53 .net
能力はありそうに見えるのにもったいないよね。ああいうので仕事を失しなうってのは。
俺の同僚にも居たわ。正直に言って、俺より優秀だった�
1024:フに人当たりが強すぎてやんわり退職させられて 先月会ったらトビやりながら独学でコーディングしてるらしい
1025:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/05/05 15:36:58.33 .net
IIなんじゃねーの(鼻くそホジホジ)
1027:名無しさん@お腹いっぱい。
18/05/05 23:01:08.19 .net
somecommandを副作用のあるコマンド(touchとかrmとか)にしでsomevarがある状態とない状態でそれぞれどうなるか比べてみればいい。たぶんIIだと思うが。
1028:名無しさん@お腹いっぱい。
18/05/06 01:02:57.40 .net
>>1000
おぉう。そんな手があったとは。勉強になります。
おっしゃる通りIIでした。
somevarに変数が格納されている時、somecommandは実行されませんでした。
1029:名無しさん@お腹いっぱい。
18/05/06 10:46:14.65 .net
echo 999
1030:名無しさん@お腹いっぱい。
18/05/06 10:46:54.81 .net
exit 1000
1031:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 411日 22時間 39分 28秒
1032:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています