1 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/08/02(木) 05:22:16.82 .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の方が適した
67 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/09/15(土) 09:20:57.31 .net] 特定文字列の除外リストを元に除外処理をしたいんだけど リストとかあきらめてgrepをフィルタファイルとして別するのが一番楽? やりたいのは以下のようなことなんだけど シェルスクリプトなのにプログラミング的なことやって grepのフィルタを組み立てることに違和感を感じてる(面倒とはっきり言えって?) echo ${DATA_REC} | grep -e AAA -e BBB -e CCC if [ $? -eq 0 ] then continue fi # 継続処理
68 名前:名無しさん@お腹いっぱい。 [2018/09/15(土) 09:24:06.05 .net] > grepをフィルタファイルとして別するのが一番楽? ってのはファイルにgrepのコマンドを書いてreadで読んで echo ${DATA_REC} ${grep_cmd} とかにするってことね grepコマンドが書かれてたら適用 書かれてなかったらスルーって感じ
69 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/09/15(土) 09:26:44.49 .net] ああパイプがうまくいかないから若干判定が必要か・・・ pi@melchior /tmp $ export grep_cmd=" | grep -e AA -e BB" pi@melchior /tmp $ echo AAA $grep_cmd AAA | grep -e AA -e BB pi@melchior /tmp $ echo AAA | $grep_cmd -bash: |: command not found pi@melchior /tmp $ export grep_cmd=" grep -e AA -e BB" pi@melchior /tmp $ echo AAA | $grep_cmd AAA pi@melchior /tmp $
70 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/09/15(土) 10:04:14.90 .net] もうベタで書いてしまった・・・ でも順調!すげーよく動いてる! この件は今後の課題にしよう
71 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/09/15(土) 11:49:54.77 .net] 除外する文字列をファイルに入れて grep -f か grep -v -f でいいような気がする
72 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/09/15(土) 12:13:24.53 .net] >>66 > シェルスクリプトなのにプログラミング的なことやって シェル芸じゃなくてスクリプトなんだから プログラミングで当たり前だよw
73 名前:71 mailto:sage [2018/09/15(土) 12:37:34.28 .net] >>67 少し考えてみたが、俺もgrepの-fオプションを利用するのが一番楽だと思うな ただ昔、除外リストの否定とかやりたかったんで書いたことはあるが
74 名前:71 mailto:sage [2018/09/15(土) 12:43:55.58 .net] grep -f 使えばいいから不要だが お手軽に>>66 のようなことをするのならこうかな リストにスペースなどが入っていたらうまくいかんがw 文字列の組み立ての参考として echo ${DATA_REC} | grep $(printf ' -e %s' $(cat list))
75 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/09/22(土) 07:11:59.06 .net] シェルスクリプトじゃなくてシェルの基礎を訊いてアレだけど bashの$()と``って使い分けた方がいいの? 端末ではバッククォート多用してるけども
76 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/09/22(土) 09:23:42.74 .net] ``は古い書き方。ネストができないという欠点が有る bashに限らず、$()を使ったほうが良い。欠点は文字が一文字多くなるだけ
77 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/09/22(土) 10:20:58.39 .net] きっちりエスケープすればネストはできるよ。もちろん推奨はせんが
78 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/10/07(日) 11:42:06.75 .net] >>74 mywiki.wooledge.org/BashFAQ/082
79 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/10/13(土) 19:33:57.01 .net] https://imgur.com/FAF05na.jpg
80 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/09(金) 16:05:12.56 .net] test $(date +%w) -eq 5 今日が金曜日なら5が出るんですが、-eq というのはコマンドなのかtestコマンドのオプションなのか、これは何ですか?
81 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/09(金) 16:08:05.57 .net] 自己レス -eq はtestコマンドのオプションで、==の事みたいですね
82 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/09(金) 16:09:52.77 .net] test コマンドの
83 名前:Iプションです。 ところで今日は金曜日ですが5は出ませんよね。 戻り値は0となりますが……何か勘違いしている気がします。 [] [ここ壊れてます]
84 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/09(金) 16:18:31.36 .net] すみません test $(date +%w) -eq 5 && echo "今日は金曜日!" これだと、金曜日だとechoが実行されました
85 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/09(金) 16:20:38.51 .net] >>82 自己レス 金曜日かどうか調べて金曜日なら戻り値は0、 で、戻り値が0の場合echoが実行されるって事ですね
86 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/09(金) 16:32:51.67 .net] 毎月第2月曜日と毎月第2週の月曜日とでは、指す日にちってもしかして異なります? 0 17 8-14 * test $(date +%w) -eq 5 && command こんな風にcronで毎月第2金曜日とか指定したいんですが、 例えば今月の5日で言うと、5日は1回目の月曜日だけど、月の2週目にあるので疑問に思いました。 0 17 8-14 * test $(date +%w) -eq 1 && command これだと今週の月曜日には実行するされないですよね?
87 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/10(土) 02:31:24.55 .net] 読みづらい。testなんて使うな [ $(date +%w) -eq 5 ] && echo "今日は金曜日!"
88 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/10(土) 10:01:16.06 .net] >>85 [ ]ってなんですか? ググろうにも記号なのでググれないです
89 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/10(土) 10:12:06.10 .net] man [
90 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/10(土) 18:00:25.18 .net] bash(バージョン 4.4.12(1)-release)でスクリプト書いててちょっと謎が $ a=1; b=2; [[ ${a}<=${b} ]]; echo $? こうするとちゃんと終了コードの0が返ってきますが $ a=1; b=2; [[ ${a} <= ${b} ]]; echo $? 比較演算子の前後にスペースを入れると「条件式に構文エラーがあります」「`${b}' 周辺に構文エラーがあります」と怒られます $ a=1; b=2; [[ ${a} < ${b} ]]; echo $? 比較演算子をleでなくltにするとまた0が返ります これって何故なんでしょう?
91 名前:名無しさん@お腹いっぱい。 [2018/11/10(土) 19:37:33.60 .net] >>88 [[ ... ]] で使える演算子に <= は存在しない それは数の比較ではなく [[ "1" < "=2" ]] という文字列の比較になっている なので <= の右に空白を置くと [[ "1" < "=" "2" ]] となりエラー 条件式 https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbBW
92 名前:88 mailto:sage [2018/11/10(土) 21:37:24.33 .net] >>89 さっそくありがとうございます そうか、イコールをつけない不等号で上手く動いてるように見えるのは、文字列として辞書順で比較してるからなんですね どうやら私の頭の中では、二重丸括弧での算術式展開とゴッチャになってたみたいです 何時間も唸ってたのが一撃でスッキリしました。ありがとうございました
93 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/10(土) 21:45:21.63 .net] 記号のコマンドってドットと[以外にもあるんか?
94 名前:名無しさん@お腹いっぱい。 [2018/11/10(土) 22:29:10.53 .net] >>91 :
95 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/11(日) 00:38:12.80 .net] >>87 もしかしてtestと[]はだいたい同じですか? testを使わない方がいいのはなぜなんでしょうか?
96 名前:名無しさん@お腹いっぱい。 [2018/11/11(日) 19:15:20.55 .net] r2.upup.be/wV2qsULdHm
97 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/11(日) 23:47:57.65 .net] >>87 それで出てくるのは /usr/bin[ の方のmanじゃないだろうか
98 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/15(木) 14:21:20.04 .net] bash の場合。 $ type [ [ is a shell builtin $ help [ [: [ arg... ] Evaluate conditional expression. This is a synonym for the "test" builtin, but the last argument must be a literal `]', to match the opening `['.
99 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/21(水) 22:42:24.51 .net] sedで\1を変数名としていっぺんに異なる部分を異なる変数の内容で変換できませんか? sed -e "s/<\(.*\)>/${\1}/g" こんなかんじの
100 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/29(木) 16:58:28.90 .net] #!/bin/bash # 変数UR
101 名前:L, ETAGには既に適切な値が入ってるとする OPT=('--header' "'If-None-Match: ${ETAG}'") curl "${OPT[@]}" "${URL}" こんなスクリプトを書いたけど、curlと鯖のやりとりを覗くと、リクエストヘッダのIf-None-Matchの行にシングルクォーテーションが付いて 'If-None-Match: (ETAGの値)' と送られてしまう。で、試しにcurlの行を echo "curl ${OPT[@]} ${URL}" > /tmp/tempfile . /tmp/tempfile と書き換えて実行すると、ちゃんと正常に動く。man bashを読んだりbashの引用符の扱われ方をググってみたりしても、何が何だかさっぱり分からない。 どなたか助けてくれませんか。 [] [ここ壊れてます]
102 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/29(木) 18:06:56.14 .net] 自己レス curlだからとか関係ないな。変数にシングルクォートで囲ったものが入ってて、それをダブルクォートで囲った配列展開してるんだから、そのパラメーターはそのままシングルクォートつきになって当然。 しかし、ETAGはダブルクオートを含むしhttpリクエストヘッダはスペースを含むから、全体をシングルクォートで囲まなきゃならんのだよな。 やっぱどのタイミングでどのクォートがどう展開されるのか、一段階ずつ追いかけてみるしかないのかな
103 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/29(木) 21:56:13.42 .net] なんか混乱しとるなw まあ、ダブルクォートは、他言語を使っている人からすれば 直感に反する機能だってことに、俺も最近気づいたんだけどな ただどこがどう違うかを言葉で説明したことがわけじゃない。やってるみるか? ・シェルスクリプトは文字列として展開されて実行されているようでそうではない ・ダブルクォートは文字列を囲う機能ではなく、変数展開の挙動を変えるエスケープの一種 この二つに集約されるかなぁ > しかし、ETAGはダブルクオートを含むし これ関係ないんだわ OPT=('--header' "If-None-Match: ${ETAG}") だと OPT=('--header' "If-None-Match: "686897696a7c876b7e"") こうなってしまい OPT=('--header' "If-None-Match: " 686897696a7c876b7e "") のように解釈されると思ってしまうが違う。 別に文字列展開されてから、動くわけじゃない ダブルクォートは「 If-None-Match: ${ETAG} 」の部分を一つの引数として 扱いますよー(ただし中の変数は展開されますよ)という意味。 変数の中にダブルクォートが入っていようが改行が入っていようが関係ない またダブルクォートはそれだけの機能ではなく $@ が入っている場合に異なる挙動をする "$@" が入っている場合、一つの引数ではなく複数の引数として扱われる 例えば引数$1〜$5が存在する場合、"$@" は "$1" "$2" "$3" "$4" "$5" と等価 また"foo$@bar" となっていた場合、 "foo$1" "$2" "$3" "$4" "$5bar" と等価 引数が一つなら "foo$1bar" だし、引数がゼロの場合は、書かなかったのと同じとなる("" 空文字にはならない) このように文字列として囲う機能じゃなくて、中に入ってる文字や変数の解釈の仕方に影響を与える機能
104 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/29(木) 22:00:40.89 .net] ちなみに "$@" を複数の引数に展開されたくなければ "$*" を使う
105 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/11/30(金) 06:16:21.18 .net] >>100-101 ありがとう。おかげで、サクッと片付きました。素直に OPT=('--header' "If-None-Match: ${ETAG}") curl "${OPT[@]}" "${URL}" で何の問題もなく動作しました。最初にcurlについて調べてたときにETAGを使う例でシングルクォートが使われてたのに、ずっと脳味噌が引っ張られてたようです。 上の行で変数に入れる時点で、スペースを含む一つの文字列として扱われてるんだから、あとはその中身がなんであるかに関係なく、"$[@]"で展開すればいいわけですね。 ありがとうございました。
106 名前:名無しさん@お腹いっぱい。 [2018/12/25(火) 18:37:21.02 .net] bashでログ出力処理を一括でやるにはどうすれば良いですか? powesshellだと、Start-Transcript に対応するコマンドを教えてください
107 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/12/26(水) 01:04:
] [ここ壊れてます]
108 名前:21.34 .net mailto: >>103 何がしたいのかよくわからないが シェルスクリプト内の標準出力と標準エラー出力をファイルに出力するなら #!/bin/bash exec >script.log 2>&1 ... [] [ここ壊れてます]
109 名前:名無しさん@お腹いっぱい。 [2018/12/26(水) 08:34:29.57 .net] >>104 何したいかよくわからんって、 パワーシェルでいうStart-Transcriptをやりたいの bashで一行ずつリダイレクトつけないとダメとかダサすぎる
110 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/12/26(水) 08:47:38.26 .net] 回答ちゃんと読め
111 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/12/26(水) 09:08:14.92 .net] PowerShellなんぞ興味が無いから知らんという人が多かろう 標準出力と標準エラー出力をファイルとコンソールの両方に出したいと言えばいい 知ってるがお前の態度が気に入らない(AA略)
112 名前:名無しさん@お腹いっぱい。 [2018/12/26(水) 18:22:57.16 .net] 生意気だな
113 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/12/26(水) 18:30:53.30 .net] ドザはどこ行ってもあれだな
114 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/12/26(水) 19:04:39.84 .net] ドザがー ドザがー
115 名前:名無しさん@お腹いっぱい。 [2019/01/10(木) 14:22:50.61 .net] やっつけ $ { > echo foo > ECHO bar > } 2>&1 | tee result.txt foo ECHO: コマンドが見つかりません
116 名前:名無しさん@お腹いっぱい。 [2019/01/26(土) 23:47:05.51 .net] FreeBSD の /usr/bin/man で、 if { sizes=$($STTY size 0>&3 2>/dev/null); } 3>&1; then という記述があるんですが、これって何をしているんでしょう。 ・標準エラー出力を捨てている ・3 を 標準入力の指す先 (tty) に設定? ・0 を ↑の3に設定? 3>&1 して 1>&3 なら退避目的かなと思うんですが、これは違うので、 意図がわからないです。 ソースはここです。 https://github.com/freebsd/freebsd/blob/master/usr.bin/man/man.sh#L646
117 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/01/28(月) 19:18:42.39 .net] ・MANWIDTH=ttyのときはmanの標準出力1の横幅を取得したい。 ・sttyの操作対象端末は標準入力0で、出力先は標準出力1。 ・a>&b は dup2(b,a) のことで、左を使うと実体は右になる。 ・標準エラー出力2は捨てる。 という前提で、 sizes=$($STTY size 0>&1 2>/dev/null) と書くと、 sttyの標準出力1は$()に取られてるから、manの標準出力1とは別物になって、 正しい端末をsttyできない。 { sizes=$($STTY size 0>&3 2>/dev/null); } 3>&1 は、1が取られ てるなら3を中継すれば安全じゃねと書いたものと推測される。 { sizes=$($STTY size 2>/dev/null); } 0>&1 と書けば十分なはず。
118 名前:名無しさん@お腹いっぱい。 [2019/01/29(火) 01:14:27.65 .net] findした結果を1行づつ配列に代入したい場合にはどうすればよいでしょうか? 当方が書いたshellだと、検索したい文字列に空白があるケースだと そこで要素が別れてしまいます。 array=$(find ${HOME}/animal -type d -iname "*検索したい文字列*")
119 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/01/29(火) 12:56:34.68 .net] IFSを改行のみにする
120 名前:112 [2019/01/30(水) 08:38:21.70 .net] >>113 ありがとうございます! リダイレクトにstdin/stdoutの差し替え的な使い方があるとか、sttyはstdinを見るとか、sttyがstdinを見てもstdoutを見てもそれが端末を指しているなら同じこととか、数枚目からうろこが落ちました。 しかしそもそもsttyはデフォルトのstdin見ておけばいいんじゃね、とも思ったり。command |man 的な使い方ってあったっけなぁ。
121 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/02/05(火) 14:26:11.34 .net] 少々スレ違いですがお許しください OS 組み込みの tcsh をバージョンアップしたいのですが、 シェルスクリプトの挙動が変わってしまうのが怖くて、なるべく コンパイル時オプション(configure オプション)を揃えたいのですが バイナリしかない場合に、コンパイル時オプションを調べる方法ってないですかね? ## 例えば ISC BIND の -V オプションみたいな
122 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/02/07(木) 03:39:18.86 .net] 少々じゃないくらい違うなあ
123 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/02/07(木) 03:40:20.92 .net] しかもマルチかよ
124 名前:名無しさん@お腹いっぱい。 [2019/05/25(土) 14:36:47.91 ID:LVSH0hupc] find -print0した結果を1項目ずつ配列に代入したい場合にはどうすればよいでしょうか? IFSを\0にしようとしても駄目みたいです。
125 名前:名無しさん@お腹いっぱい。 [2019/07/27(土) 21:39:15.96 .net] ログインシェルでfishを使う時、 https://gist.github.com/mitukiii/4954559 できたらやり方教えてください $ myCommand タブキー押すと $ myCommand foo -- do foo bar -- do bar unk -- do toilet って候補と1行説明表示されて $ myCommand f でタブーキー押すと $ myCommand foo と補完される 方法を知りたいです これできたら重いzshから魚に乗り換えられる
126 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/07/30(火) 12:52:38.09 .net] ここはシェルスクリプトのスレです。 シェルの使い方のスレではありません。 スクリプトの話をしてください
127 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/07/30(火) 22:27:15.09 .net] 具体的に何を語ったらいいの
128 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/07/31(水) 19:16:20.41 .net] シェルスクリプトだけで実装した一番高速なFizzBuzzはどんなものかとか
129 名前:名無しさん@お腹いっぱい。 [2019/08/01(木) 10:04:58.33 .net] yash使てる?
130 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/01(木) 14:04:09.49 .net] 使えてないという報告は一つもない
131 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/01(木) 22:41:59.49 .net] 「使てる(つこてる)?」は「使っていますか?」という意味の質問であって、使用可能かどうかを聞いてる訳では無いのでは
132 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/01(木) 23:04:57.30 .net] 真面目君か
133 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/05(月) 09:18:07.69 .net] ほにゃらら ほんじゃらら かきく 0 あいう かきく 1 あいう かきく 2 あいう かきく 3 あいう かきく 4 あいう かきく 5 あいう さしすせそ と書かれたテキストファイルを作りたいです echo -e ほにゃらら"\n"ほんじゃらら > index.txt seq -f "%g あいう" 0 5 > index.txt ここまではわかったんですが、seqで連番を書き出す時に番号と番号の間の行に「かきく」を入れて最後の行に「さしすせそ」を加えるやり方教えてほしいです
134 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/05(月) 10:32:33.45 .net] awkとかじゃいかんの
135 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/05(月) 11:55:34.38 .net] >>130 ありがとうございます 調べてみました cat > index.txt << "EOF" ほにゃらら ほんじゃらら あいう EOF seq 0 5 | awk -v 'ORS= あいう\nかきく\n' '{print $1}' >> index.txt echo さしす >> index.txt
136 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/05(月) 11:55:45.48 .net] こうやると ほにゃらら ほんじゃらら あいう 0 あいう かきく 1 あいう かきく 2 あいう かきく 3 あいう かきく 4 あいう かきく 5 あいう かきく さしす と出力されました 最後から2行目の「かきく」を出さないやり方が分からないです
137 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/05(月) 12:05:17.31 .net] ブレース展開
138 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/05(月) 12:11:44.60 .net] 一応これでうまくいきました cat > index.txt << "EOF" ほにゃらら ほんじゃらら かきく EOF seq 0 5 | awk -v 'ORS= あいう\nかきく\n' '{print $1}' >> index.txt sed -i -e '$d' index.txt echo さしす >> index.txt
139 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/05(月) 12:13:50.09 .net] >>133 自分のやり方はなだったらしそうなのでそのキーワード調べてみます
140 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/05(月) 12:28:22.64 .net] えー、難しい... 俺>>130 はこんなもんしか考えてなかったけど awk 'BEGIN{print"ほにゃらら\nほんじゃらら";for(i=0;i<6;i++){printf"かきく\n%d あいう\n",i};print"さしすせそ"}'
141 名前:名無しさん@お腹いっぱい。 [2019/08/05(月) 12:28:39.74 .net] >>129 cat <<END >index.txt ほにゃらら ほんじゃらら $(printf 'かきく\n%s あいう\n' $(seq 0 5)) さしすせそ END
142 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/05(月) 12:29:43.26 .net] あ、バックスラッシュが円記号になってしまった...
143 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/05(月) 12:30:25.69 .net] cat > index.txt << "EOF" ほにゃらら ほんじゃらら EOF printf "かきく\n%s\n" {0..5}あいう >> index.txt これだと大分短くて出来たけど、数字と「あいう」の間にスペースが入れられない
144 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/05(月) 12:32:03.53 .net] 被ってしまった みなさんありがとうございます 質問ぬしの自分は>>139 です 135と136のやり方調べてみます
145 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/05(月) 12:43:19.31 .net] >>137 catで書き出すファイルの中でprintfをやって、そのrintfの中でseqで連番作るんでね これだとファイルへの書き込みは1回ですみますね >>136 これも> index.txtで終えれば1回ですみますね だけどawk難しいです がんばって135のやり方理解できるようにします
146 名前:名無しさん@お腹いっぱい。 [2019/08/05(月) 13:06:08.43 .net] >>141 > これだとファイルへの書き込みは1回ですみますね どんな方法で作るにせよ { } で括れば一回にまとめられるよ { printf '%s\n' 'ほにゃらら' printf '%s\n' 'ほんじゃらら' printf 'かきく\n%s あいう\n' $(seq 0 5) printf '%s\n' 'さしすせそ' } >index.txt
147 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/05(月) 15:17:00.15 .net] >>142 こんな方法もあるんですね ありがとうございます curlの標準出力の6行目を変数に入れて他の文字列と組み合わせて標準出力に出力したいです。 URL="hoge" ROKU="curl -sS $URL | sed -n '6p'" echo "あいうえお"$ROKU"さしすせそ" しかし結果はこうなりました あいうえおcurl -sS hoge | sed -n '6p'さしすせそ
148 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/05(月) 15:18:57.84 .net] >>143 続き >>142 さんで教わった{}を使えばよさそうな気がするですがエラーになりました
149 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/05(月) 16:33:57.17 .net] printf "あいうえお" $ROKU #chomp のように\nを消すパイプ必要だと思う printf "さしすせそ"
150 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/05(月) 17:18:21.98 .net] >>145 echoじゃなくてprintfなら改行されないからあいうえおに続けて書けますね だけど、このままだとROKUのところで改行されてしまうからさしすせそは2行目に来ちゃいますね
151 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/05(月) 18:01:04.99 .net] >>129 > と書かれたテキストファイルを作りたいです こうすれば良いのでは? cat<<HERE > index.txt ほにゃらら ほんじゃらら かきく 0 あいう かきく 1 あいう かきく 2 あいう かきく 3 あいう かきく 4 あいう かきく 5 あいう さしすせそ HERE
152 名前:名無しさん@お腹いっぱい。 [2019/08/05(月) 19:41:32.36 .net] >>143 コマンドの標準出力を変数に設定したりコマンドの引数にしたりするには 「コマンド置換」 $(…) を使います あと、「6行目」以外の部分も取り出したくなったときに curl を何度も実行したくはないので curl と sed は分けておきたいところ するとこんな感じ PAGE=$(curl -sS "$URL") ROKU=$(printf '%s\n' "$PAGE" | sed -n '6p') NANA=$(printf '%s\n' "$PAGE" | sed -n '7p') printf 'あいうえお%sさしすせそ\n' "$ROKU" printf 'かきくけこ%sたちつてと\n' "$NANA"
153 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/06(火) 10:37:34.03 .net] >>147 複数行書く方法ありがとうございます >>148 うまくいきました ありがとうございます
154 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/29(木) 02:47:55.71 .net] $ bash -c 'unset a b;echo 10|read a;let b=a+10;echo $b' 10 この動作ってPOSIX的にはどうなの?
155 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/29(木) 05:08:51.78 .net] 読みづれーなw bash -c ' unset a b echo 10 | read a # echo $a = 空 let b=a+10 echo $b ' letはPOSIXにない readはサブシェルなんだからaは空に決まってる ごく普通の正しい動作
156 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/29(木) 05:09:53.11 .net] 正しいコード bash -c ' unset a b echo 10 | { read a let b=a+10 echo $b } '
157 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/29(木) 23:22:24.50 .net] letまで考えて無かったすまん まあ説明の為なのでそこは目をつぶってくれたまい opensuzeなんだけども $ ksh -c 'unset a b;echo 10|read a;let b=a+10;echo $b' 20 $ この動作ってPOSIX的にはどうなの?
158 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/08/30(金) 06:34:55.40 .net] バグ
159 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/09/10(火) 19:48:12.68 .net] curlのやり方教えてください ブラウザのフォームにjsonを書いてポストボタンを押すとokが出るけどターミナルからcurlでやろうとすると、ボディが空だとなり送信出来ません 書き方間違えていますか? https://i.imgur.com/Nvm7CMj.jpg
160 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/09/11(水) 14:49:50.58 .net] ブラウザの開発ツールからcURLでコピーした方が早そうだぞ
161 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/09/11(水) 15:08:13.17 .net] >>156 どうもありがとうございます -H 'Content-Type: application/json' を付けたら動きました
162 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/09/12(木) 17:05:57.53 .net] アプリの起動判定をしたいんですが ps -alxw | grep アプリ名 2行より多ければアプリが起動してるんだと思いますけど確実な方法ありますか?
163 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/09/12(木) 17:48:19.11 .net] killall -0 アプリ名 とか?
164 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/09/12(木) 19:39:47.90 .net] >>159 どうもありがとうございます そのコマンドで何も変えらなかったら起動中という事であってますか?
165 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/09/13(金) 07:33:53.20 .net] 起動してないとわかっても、その直後に起動することも有るから ロックを掛けないと確実にはならないけどな
166 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/09/14(土) 01:15:30.85 .net] pgrepでええやん、と思ったけど環境依存か
167 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/09/14(土) 02:03:14.71 .net] >>161 どの環境でも使えるロックの機構ってなにかある?