1 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 17:54:23.25 .net] シェルスクリプトの総合スレです。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)もしくはPOSIX準拠の互換シェルがデフォルトです。 bash/zsh/ksh/ash/dash/yash/poshなどの専用機能に依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 ・POSIXについてのリンクは https://en.wikipedia.org/wiki/POSIX にまとめられています 最新の仕様はこちらへ pubs.opengroup.org/onlinepubs/9699919799/ (左上の「Shell & Utilities」 から参照することができます。) ・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に逃げずにシェルスクリプトで処理するのが頭のいいやり方。 質問に対して問題が間違ってるといちゃもんをつけるのもやめましょう 前スレ シェルスクリプト総合 その26 https://mevius.5ch.net/test/read.cgi/unix/1489979246/
148 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 12:01:23.51 .net] >>145 >>136 >$ cat ZZZ.txt | grep XXX | tr '\n' '|' | sed 's/|$//1' >↑こういうので行けるけど。違うでしょ? って教えてくれてるやん。「違わない」「それです」でいいんじゃないの?それが違うならどう違うって言うべき
149 名前:かと(どうみても違わないとしか思えないけど) 質問自体がアレだが自分の言いたいことをうまく説明できないのはいいとして、応えてくれてる人の言ってることがわからない/それに応えないのはアレだな [] [ここ壊れてます]
150 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 12:03:34.81 .net] awkの手前で別途 fgrep -f か egrep -f を使った方が、改行→「|」変換をサボれて楽な気がする。 fgrep/egrep -f を使うときは bashないし zsh 依存になるけど fgrep -f <(grep XXX ZZZ.txt) と書くともっと楽だね。
151 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 12:10:12.44 .net] \じゃないよバックスラッシュだよ というのがありそうな気もしないでもない
152 名前:133 mailto:sage [2018/05/26(土) 12:32:36.46 .net] シェルスクリプト内で自動で行いたい旨を 書き損じておりました。 cat ZZZ.txt |grep XXX hoge fuga から awk '($3 !~ /hoge|fuga|neko/) && ($4 ~ /01/)' output.txt としたいのです。 >>146 >$ cat ZZZ.txt | grep XXX | tr '\n' '|' | sed 's/|$//1' でまさしく狙い通りの出力がされるのですが>>133 のawkのパターン部にどうかけば同じ文字列が出せるかわかりません
153 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 12:38:10.49 .net] awk の文はただの文字列でしかない awk '($3 !~ /'"$aaa"'/) && ($4 ~ /01/)' output.txt でも、 awk "(\$3 !~ /${aaa}/) && (\$4 ~ /01/)" output.txt でも(他にエスケープ必要なのあるかな?)、 普通にシェル変数を(文字列内に)展開するのと変わらんぞ
154 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 12:42:16.30 .net] 書き損じどうこうじゃなくて、受け応えができないのが致命的ではあるなw
155 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 12:44:02.94 .net] よく見たら、 hoge fuga から hoge|fuga|neko って、nekoはどこから来たっていう。まあうっかりだろけど
156 名前:133 mailto:sage [2018/05/26(土) 13:37:00.34 .net] みなさん申し訳ありません >>150 のレスを見てクォートをよ〜く見なおしたら動きました。 初心者のたわごとに付きあわせてしまい申し訳ありませんでした。
157 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/27(日) 08:08:25.73 .net] nekoです。nekoはいます。
158 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/30(水) 15:51:14.73 .net] 寝た子は起こすな 寝子は起こすな
159 名前:名無しさん@お腹いっぱい。 [2018/05/30(水) 20:03:13.31 .net] sedコマンドでSGRを扱いたいんですがどうすればいいですか。 $ echo abc | sed 's/^a/\033[1m&\033[0m/1' などとしてaを太字にしたりしたいです。
160 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/30(水) 20:16:35.46 .net] echo abc | sed -e 's/^a/'$'\033[1m&'$'\033[0m/1'
161 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/30(水) 21:08:39.87 .net] 横からだが、 なんのこっちゃと思ったら $'' はエスケープ文字処理してくれんのね。なるほど 最初のだけでいいのでは?もしくは最初に付ける。もしくは逐一付けて閉じる echo abc | sed -e 's/^a/'$'\033[1m&\033[0m/1' echo abc | sed -e $'s/^a/\033[1m&\033[0m/1' echo abc | sed -e 's/^a/'$'\033''[1m&'$'\033''[0m/1' と思いました
162 名前:156 mailto:sage [2018/05/31(木) 06:51:45.12 .net] ありがとうございます。解決しました。 これは後出しになってしまいますが、POSIXの範囲でやりたかったので $''ではなく$(printf)を使いました。
163 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/02(土) 23:56:12.94 .net] 英語圏の序数詞を適切に処理するシェルスクリプト(というかワンライナー)を考えたのですが添削してください $ for i in $(seq 15); do echo $i$(case $i in *1) echo st;; *2) echo nd;; *3) echo rd;; *) echo th;; esac); done 出力は一応望み通りでまたPOSIX utils+seq(1)のみで実行可能です。
164 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/03(日) 00:35:29.50 .net] 11st とか 12nd になってるけどそれはいいの?
165 名前:名無しさん@お腹いっぱい。 [2018/06/03(日) 00:38:58.53 .net] なにいっとるんやこいつw
166 名前:名無しさん@お腹いっぱい。 [2018/06/03(日) 01:12:42.26 .net] なにいっとるんやってなにいっとるんやww
167 名前:160 mailto:sage [2018/06/03(日) 01:46:34.86 .net] すいません。>>161 さまのおっしゃる通りです。 $ for i in $(seq 30); do echo $i$(case $i in *1?) echo th;; *1) echo st;; *2) echo nd;; *3) echo rd;; *) echo th;; esac); done これでどうでしょうか
168 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/03(日) 16:20:05.98 .net] クソ
169 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/03(日) 16:34:12.72 .net] いんでね
170 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/03(日) 17:38:56.64 .net] まず添削してくださいってどうしてほしいんだ ちゃんと動いてんならそれはもう正解だと思うんだが
171 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/03(日) 21:36:16.19 .net] 実際間違ってたんだし、いいじゃん
172 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/04
] [ここ壊れてます]
173 名前:(月) 20:30:59.60 .net mailto: >>167 ちゃんと動いているかどうか判断できないから聞いてるんでは [] [ここ壊れてます]
174 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/04(月) 20:52:08.98 .net] エラるのはbashのバージョンのせいかな?3.2.57ではエラる/4.3.48では問題ない だとしたらPOSIX utils云々はちょっと違うんじゃねと思わなくもない。POSIX utils云々って書いている意図がよくわからんけど
175 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/04(月) 21:51:17.95 .net] case文をこうしたら3.2.57で動いた case $i in (*1?) echo th;; (*1) echo st;; (*2) echo nd;; (*3) echo rd;; (*) echo th;; esac
176 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/04(月) 22:16:01.07 .net] おおっ。ぱーふぇくつ(?)やねっ! ( が必要??なんなんなん??と謎だけど
177 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/04(月) 22:26:45.14 .net] $() 内では、case の ) を case の ) と認識してないで、$( の終わりと見てまうってのか。それで普通は使わない ( をか。いちおう ( はつけてもいいのね。つけてもつけなくてもいい存在みたいだけど
178 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/04(月) 22:42:04.72 .net] え…… >>164 のやつ、GNU bash 4.4.12,zsh 5.3.1,dash全てで動いたんだけど(Debian GNU/Linux)。 もちろん$()判定の不具合を回避したcase ()版でも動いたけれども。
179 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/04(月) 23:08:17.44 .net] bashの前のバージョン 3.2.57 でのなんですけど
180 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/04(月) 23:49:50.64 .net] あ。>>170 でそう書いてあるな……。すいません。
181 名前:名無しさん@お腹いっぱい。 [2018/06/05(火) 00:18:12.94 .net] sedなどで 1. 「%」以降改行までを削除 2. ただし「%」の直前に「\」があれば削除しない (要するにTeXシステムのコメント除去) をしたいです。また、できればなのですがPOSIXの範疇で行いたいです。 しかし2.を表わす正規表現が分かりません。教えていただけないでしょうか。 sedでsed -e '/%/{}'のようにして{}の内部で「\」が前置されているか判定するのが一番一般的かとは思うのですが それさえ……。 どうかよろしくおねがいします。
182 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 00:27:24.06 .net] sed -e '/^%/d' -e 's/\([^\]\)%.*$/\1/g' でも確かTeXってオプション引数に%含まれてる場合コメントにならないんじゃなかったか? \somecs[hoge=42%]{VAL} ↑こういうの。いや俺の記憶違いかもしれんが
183 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 01:22:58.47 .net] sedのスレもあれば 正規表現のスレもある なんでここで聞く
184 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 01:34:56.97 .net] 使えるからかな
185 名前:名無しさん@お腹いっぱい。 [2018/06/05(火) 15:36:09.34 .net] 以下のCのソースコードをシェルスクリプトに直したいのですが難しくてできない状態です お願いできますでしょうか? Cでは動作確認済みです インデントするとここに貼れなかったので、見にくくなっていてすみません どなたかよろしくお願いします #include <stdio.h> int main(void){ int res, i; printf("2以上の整数をキーボードから入力してください。\n"); scanf("%d", &res); for (i = 2; i <= res; i++) { if (i == res) { printf("%dは素数でした。\n", res); } else if ((res % i) == 0) { printf("%dは素数ではありません。%dで割り切れます。\n", res, i); break; } } return 0; }
186 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 16:08:24.34 .net] 宿題っぽい
187 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 16:10:05.52 .net] なんかここ最近大学の宿題か?っていう質問多いな
188 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 16:10:24.26 .net] 丸被りしててワロタ
189 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 16:12:56.96 .net] さすがに今回のはな
190 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 16:18:19.15 .net] 判定方法から見直した方がいいんじゃないの なんか無駄そう
191 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 16:31:28.92 .net] 宿題は自分でやろう
192 名前:181 mailto:sage [2018/06/05(火) 16:41:35.30 .net] その通りっすね スレ汚し失礼しました
193 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:10:33.43 .net] 以下のCのソースコードをシェルスクリプトに直したいのですが × 難しくてできない状態です ○
194 名前:馬鹿だからできないです 勝手に難しい状態にするんじゃねーよ [] [ここ壊れてます]
195 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:13:20.82 .net] 普通に読めば自分にとっては難しいってことなんじゃ 大学生の宿題も困るが読解力の無いバカも困る
196 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:14:42.20 .net] だな
197 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:16:21.87 .net] このスレは馬鹿ばかりいる状態ですwww
198 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:16:51.44 .net] だな
199 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:18:07.86 .net] プライドで自分が馬鹿でわかりませんって言うことができないから それは悪くねぇけどさぁ、難しい状態になっちゃんてんのよー って言いたいからそう書いてるんだろ それぐらい読み取れよ
200 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:19:01.78 .net] だな
201 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:22:56.16 .net] よほど気に障ったか気に入られたらしいwどっちかな?
202 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:37:21.07 .net] だな
203 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:53:12.42 .net] んだ
204 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 18:20:42.13 .net] >>194 馬鹿乙 いい加減にしとけ
205 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 18:35:06.81 .net] だな
206 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 18:35:44.97 .net] >>199 あんたよっぽど気に触ったんだねw
207 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 19:00:07.82 .net] >>194 わざわざまた出てくるとかどんだけプライド高いんだよ w
208 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 19:25:49.18 .net] >>202 拗らせるだけだからもう触んな。わかるやつにはわかってるから
209 名前:名無しさん@お腹いっぱい。 [2018/06/05(火) 19:35:30.82 .net] せやな
210 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 20:09:14.02 .net] >>189 は相当に痛い人だなw
211 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 20:28:47.22 .net] Cからawkだとつまらない解になってしまうな。 awk '{for(i=2;i<=$0;i++){ if(i==$0){print $0"は素数でした 。"} else if(($0%i)==0){print $0"は素数ではありません。"i"で割り切れます。";break; }}}' <<< "$(read -p "2以上の整数をキーボードから入力してください。" res ; cat <<< "$res")"
212 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 21:20:01.96 .net] >>205 いい加減にしろ。うざいって言われてるのはお前だってわかってないのか?
213 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 21:49:44.22 .net] だな
214 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 22:21:32.15 .net] curl -s "hage.com.json" | jq -r '.main | .detail_list[] | .file_list[] | .date, .file_title, .file_name' これだと、date と file_title とfile_name の内容が表示されるんですが、 detail_listと同じ階層にあるnavi_nameの内容も表示させたい場合はどう書けばいいですか? よろしくお願いします。
215 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 02:39:28.51 .net] >>209 とくにこだわりがないのであれば jq じゃなく parsrj 使えば?
216 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 02:47:20.26 .net] >>207 何言ってんだお前?
217 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 09:02:34.23 .net] aaa=(888 犬 `date +"%Y%m%d"010000 -d last-sunday`) bbb=(777 猫 `date +"%Y%m%d"150000 -d last-Saturday`) ccc=(666 鳥 `date +"%Y%m%d"000000 -d last-friday`) for hoge in "$aaa" "$bbb" "$ccc" do if [ -e ~/${hoge[1]}_${hoge[2]:0:4}_${hoge[2]:4:2}_${hoge[2]:6:2}.mp4 ]; then exit 0 else ffmpeg -i ~/output/${hoge[2]}-${hoge[0]}.aac ~/${hoge[1]}_${hoge[2]:0:4}_${hoge[2]:4:2}_${hoge[2]:6:2}.mp4 fi done こんな感じのスクリプト書いたのですが、配列が展開してくれません。 どうすれば変数に入れた配列が機能するでしょうか アドバイスお願いします。
218 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 09:51:21.96 .net] >>210 jqにこだわりはないが、 parsrjなんて誰も使ってないものは使いたくないなw
219 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 09:51:56.75 .net] >>212 配列はbash専用機能なので使うな
220 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 13:07:10.63 .net] >>189 状態ってなんだよwwwって話だよなあ 頭の悪い人は理解できないみたいだけど
221 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 13:12:22.57 .net] なんだかんだレスに飢えてるよね
222 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 13:23:12.77 .net] やりたいこと想像してベタにやってみたけど printf "%s %s %s\n" ${aaa[@]} ${bbb[@]} ${ccc[@]} | while read hoge0 hoge1 hoge2; do if [ -e ~/${hoge
223 名前:1}_${hoge2:0:4}_${hoge2:4:2}_${hoge2:6:2}.mp4 ]; then exit 0 else ffmpeg -nostdin -i ~/output/${hoge2}-${hoge0}.aac ~/${hoge1}_${hoge2:0:4}_${hoge2:4:2}_${hoge2:6:2}.mp4 fi done ...て、ほぼ配列じゃなくなっちゃったは [] [ここ壊れてます]
224 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 13:55:28.85 .net] >>217 あとは、そのbash依存の文字列の〜文字目をとってくるってのをなくそう っていうかdate使って%Y_%m_%dとかでいいだろと
225 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 14:36:06.61 .net] よくいる偉そうにしたいのが主な目的なのがわいてる感じ
226 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 14:45:44.90 .net] そういう言葉でしか言い返せないのな 悔しかったら技術で勝負しろ
227 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 14:49:07.49 .net] どこに勝負要素があるのか分からない しかし最近汚いコードがばらっと貼り付けられまくるのは同一人物なのか?
228 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 14:51:48.88 .net] 身に覚えがなかったら勝負とか言わないよなあ。てか、勝負ってw なにか偉そうにしたい/マウントとりたいのがありありだな
229 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 14:55:35.99 .net] >>221 違うんじゃね。汚いとか言いだしたらきりがないぞな。言うなら整形して上げたほうが意味あるんじゃね
230 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 15:23:05.47 .net] 年月日を配列でw printf "%s %s %s\n" ${aaa[@]} ${bbb[@]} ${ccc[@]} | while read hoge0 hoge1 hoge2; do fuga=(`echo $hoge2 | sed 's/^\(....\)\(..\)\(..\).*/\1 \2 \3/'`) if [ -e ~/${hoge1}_${fuga[0]}_${fuga[1]}_${fuga[2]}.mp4 ]; then exit 0 else ffmpeg -nostdin -i ~/output/${hoge2}-${hoge0}.aac ~/${hoge1}_${fuga[0]}_${fuga[1]}_${fuga[2]}.mp4 fi done からの〜 printf "%s %s %s\n" ${aaa[@]} ${bbb[@]} ${ccc[@]} | while read hoge0 hoge1 hoge2; do set - `echo ${hoge2} | sed 's/^\(....\)\(..\)\(..\).*/\1 \2 \3/'` if [ -e ~/${hoge1}_$1_$2_$3.mp4 ]; then exit 0 else ffmpeg -nostdin -i ~/output/${hoge2}-${hoge0}.aac ~/${hoge1}_$1_$2_$3.mp4 fi done
231 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 15:51:47.08 .net] 元のソースが汚いと修正も面倒だなとw まず一旦ループと変数をやめる if [ -e ~/犬_2018_06_06.mp4 ]; then exit 0 else ffmpeg -i ~/output/20180603010000-888.aac ~/犬_2018_06_06.mp4 fi if [ -e ~/猫_2018_06_06.mp4 ]; then exit 0 else ffmpeg -i ~/output/20180603150000-777.aac ~/猫_2018_06_06.mp4.mp4 fi if [ -e ~/鳥_2018_06_06.mp4 ]; then exit 0 else ffmpeg -i ~/output/20180603010000-666.aac ~/鳥_2018_06_06.mp4.mp4 fi
232 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 15:57:58.57 .net] つぎに、変数に入れ直す そして書き込もうとしたらNGワードとか言われたから ついでに関数にする infile=~/output/20180603010000-888.aac outfile=~/犬_2018_06_06.mp4 output "$infile" "$outfile" infile=~/output/20180603150000-777.aac outfile=~/猫_2018_06_06.mp4 output "$infile" "$outfile" infile=~/output/20180603010000-666.aac outfile=~/鳥_2018_06_06.mp4 output "$infile" "$outfile" output() { $infile=$1 $outfile=$2 if [ -e "$outfile" ]; then exit 0 else ffmpeg -i "$infile" "$outfile" fi }
233 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 16:00:15.08 .net] 一旦余計な変数を排除する output ~/output/20180603010000-888.aac ~/犬_2018_06_06.mp4 output ~/output/20180603150000-777.aac ~/猫_2018_06_06.mp4 output ~/output/20180603010000-666.aac ~/鳥_2018_06_06.mp4 output() { [ -e "$2" ] && exit 0 ffmpeg -i "$1" "$2" }
234 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 16:02:16.64 .net] >元のソースが汚いと修正も面倒だなとw だろ?w そこはスルーでええやん、別に求められているわけでもないんだし まあ、お疲れ様です(嫌味ではない)
235 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 16:15:15.79 .net] 日付の部分を元に戻す output "$(date +"%Y%m%d010000" -d last-sunday)-888.aac" "犬_$(date +"%Y_%m_%d" -d last-sunday).mp4" output "$(date +"%Y%m%d150000" -d last-saturday)-777.aac" "猫_$(date +"%Y_%m_%d" -d last-saturday).mp4" output "$(date +"%Y%m%d000000" -d last-friday)-666.aac" "鳥_$(date +"%Y_%m_%d" -d last-friday).mp4" output() { [ -e "$HOME/$2" ] && exit 0 ffmpeg -i "$HOME/output/$1" "$HOME/$2" } くだらん文字列結合を省く output "$(date +"%Y%m%d010000-888.aac" -d last-sunday)" "$(date +"犬_%Y_%m_%d.mp4" -d last-sunday)" output "$(date +"%Y%m%d150000-777.aac" -d last-saturday)" "$(date +"猫_%Y_%m_%d.mp4" -d last-saturday)" output "$(date +"%Y%m%d000000-666.aac" -d last-friday)" "$(date +"鳥_%Y_%m_%d.mp4" -d last-friday)" output() { [ -e "$HOME/$2" ] && exit 0 ffmpeg -i "$HOME/output/$1" "$HOME/$2" }
236 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 16:20:37.87 .net] なんかだらだらって感じ
237 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 16:25:36.02 .net] 最終的にこんな感じかな(適当にやったので途中のコードはバグありだろう) output "%Y%m%d010000-888.aac" "犬_%Y_%m_%d.mp4" last-sunday output "%Y%m%d150000-777.aac" "猫_%Y_%m_%d.mp4" last-saturday output "%Y%m%d000000-666.aac" "鳥_%Y_%m_%d.mp4" last-friday output() { infile=$(date +"$1" -d "$3") outfile=$(date +"$2" -d "$3") [ -e "$HOME/$outfile" ] && exit 0 ffmpeg -i "$HOME/output/$infile" "$HOME/$outfile" } もっとやりたいならoutput関数を以下のような仕様の引数の関数ににしてもいいし output 010000 888 犬 last-sunday output 150000 777 猫 last-saturday output 000000 666 鳥 last-friday 順番変えてこうすりゃ最初の配列と同じようになる output 888 犬 010000 last-sunday output 777 猫 150000 last-saturday output 666 鳥 000000 last-friday まあ、配列なんかいらんっちゅー話だ
238 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 16:26:18.
] [ここ壊れてます]
239 名前:74 .net mailto: >>230 > なんかだらだらって感じ だからいったろ? 元のコードが汚いと修正が面倒だって [] [ここ壊れてます]
240 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 16:32:01.63 .net] これを続けるの?もうしないだろうw
241 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 16:45:31.82 .net] シェルスクリプトの変数処理って型推論?
242 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 16:46:02.10 .net] そうだな。やるつもりはなかったが、 例えば関数を作りたくなければ、こんな感じで行けるぞってことぐらいかな while read -r a b c d; do infile=$(適当に修正しろ) outfile=$(適当に修正しろ) [ -e "$HOME/$outfile" ] && exit 0 ffmpeg -i "$HOME/output/$infile" "$HOME/$outfile" done <<DATA 888 犬 010000 last-sunday 777 猫 150000 last-saturday 666 鳥 000000 last-friday DATA こういう場合は標準入力として受け取ってループで回せってことだな
243 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 16:46:21.13 .net] >>209 これお願いします
244 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 16:46:50.03 .net] >>210 それなんですか?
245 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 16:47:01.39 .net] >>234 型なんて文字列しかねーよ HTMLのフォームからのPOSTと同じだ
246 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 16:56:31.38 .net] 白状する 181からここまで貼られてるソースコード全く読んでない 読む気起きない
247 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 17:11:54.82 .net] 別に構わんよ。きたねーコードだなって 直感的に思って、それを治すことで 俺の直感は正しいことを証明して 自分で納得してるだけだから
248 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 17:24:58.19 .net] それは自惚れすぎだなw