暇つぶし2chat UNIX
- 暇つぶし2ch24:名無しさん@お腹いっぱい。
18/08/27 12:48:42.73 .net
>>22
>複数の動画を同時並行でダウンロードするつくり
なんでlockファイルで二重起動を防止しないのだろうと思ったら、
同時並列でwgetを実行したいけど、
1つの動画については多重実行されないようにしたい、ということか。
ニコニコのことはよく知らないけど、半角英数のIDが存在するなら、
wgetのダウンロード開始時に動画のIDのみを参照ファイルに書き込んで、
終了したらそのIDを消すようにして、IDが参照ファイルに書かれている間は、
そのファイルをダウンロードしないという仕組みにすればどうだろう。
でもそもそも
> 実際一部の文字がpsコマンドで「?」表示されてgrepに掛からなかったことがあり
これが分からん。idのみでgrepしたら文字化けしていてもヒットすると思うけど。

25:名無しさん@お腹いっぱい。
18/08/27 14:07:03.57 .net
>>22
ファイルがオープンされているかを調べれば良いと思う
どうやるのかな
lsof が使えるなら
lsof -a -c '/^wget$/' "${filename}"

26:名無しさん@お腹いっぱい。
18/08/27 14:33:46.01 .net
> ニコニコのことはよく知らないけど、半角英数のIDが存在するなら、
> wgetのダウンロード開始時に動画のIDのみを参照ファイルに書き込んで、
> 終了したらそのIDを消すようにして、IDが参照ファイルに書かれている間は、
> そのファイルをダウンロードしないという仕組みにすればどうだろう。
参照ファイルを参照してIDが無いことを確認してID書き込むまでの間に
同じ処理が走ったらチェック抜けてしまうなというのが懸案としてあります
なのでダウンロードしているファイルそのものをロックファイルにして
しかもmvコマンドの成否によって判断したらよいのではと午前中に思いました
> でもそもそも
> > 実際一部の文字がpsコマンドで「?」表示されてgrepに掛からなかったことがあり
> これが分からん。idのみでgrepしたら文字化けしていてもヒットすると思うけど。
今はIDと拡張子でgrep掛けてるので問題ないのです
(直近だと「禁書目録」がpsコマンドで「禁??録」になりプロセスチェックをスルーしていました)
でも先の参照ファイルと同じで
同じ動画に対してほぼ同時にダウンロード処理が走った場合
psコマンドを実行してから実際にwgetコマンドを実行するまでの間に
チェックを抜けてしまうことが考えられるのでどうにかしたいなと思ってます
ちょっと後出しになって申し訳ないですが
ダウンロードの処理はさまざまな状況で実行されることがあり
これからダウンロードするぞってターミナルからコマンドを打つこともありますが
cron登録していて自動でダウンロードが走るようにもしているため
そういう適当な運用でも回避できればと考えています

27:名無しさん@お腹いっぱい。
18/08/27 14:36:33.24 .net
>>24
ありがとうございます
試してみたいと思いますが
lsof でチェックしてオープンされていないと判断して継続のwgetがオープンする間に
並行して実行された処理でwgetがオープンしてしまう可能性があるので・・・
シェルでやるには難しい処理でしょうか?

28:名無しさん@お腹いっぱい。
18/08/27 14:38:01.66 .net
>>22
>>1-15 あたりをご覧になると分かりとおり、
このスレは荒らしが立てて維持しています。
特段の理由がなければ本スレ
スレリンク(tech板)
の利用をお勧めします。

29:名無しさん@お腹いっぱい。
18/08/27 15:17:33.08 .net
サーバーのサービスではなく、
ユーザは自分1人だよね。cronも動いているけど。
それなら、ミリ秒単位で処理開始がぶつかることなんて想定しなくてもよいのでは。
人命がかかっているような処理なら別だけど。

30:名無しさん@お腹いっぱい。
18/08/28 06:51:31.61 .net
>>28
確かにそうですが方法が確立し実装してしまえば
動画を視聴してチェックと言う作業からほぼ解放されるので
もうちょっとやってみます
>>27
実装を試して相談したいことがあった場合検討してみます

31:名無しさん@お腹いっぱい。
18/08/28 15:13:22.37 .net
ずっと楽をするために今努力して作りこむってのは間違っていない
まあ出来ないと思うときは妥協は必要だが

32:名無しさん@お腹いっぱい。
18/08/28 15:25:38.94 .net
>>26
ファイルに対応する「ロックファイル」を作って、その存在確認をするのが定石だったみたい
既にロックファイルが存在していたら、別のプロセスがファイルを使っていると見做す
その際ロックファイルの存在確認と作成を「同時」(アトミック)に行うのが大事だそうで
そのファイル、安全にロックできていますか?(アトミックなファイル操作:後編)
URLリンク(heartbeats.jp)
こんな感じかな
lockfile="${outputfile}".lock
if ln -s -- $$ "${lockfile}" 2>/dev/null; then
(
unlock() { rm -- "${lockfile}"; }
trap "unlock" EXIT HUP INT QUIT SEGV TERM
wget -c -O "${outputfile}" "${url}"
) &
fi

33:名無しさん@お腹いっぱい。
18/08/29 09:19:34.39 .net
$ yotei.py 201808290900
って感じでスクリプトの引数に今日の年月日0900(date +%Y%m%d0900)を入れて実行したいです。
cronで実行したいのですが、date +%Y%m%d0900の出力をyotei.pyの引数に入れるには、1行でどうやって書いたらいいですか?

34:名無しさん@お腹いっぱい。
18/08/29 09:26:24.72 .net
$ yotei.py namae 201808290900
だったので、2番目の引数にdate +%Y%m%d0900の出力を入れたいです。

35:名無しさん@お腹いっぱい。
18/08/29 09:54:06.25 .net
すぐ思いついたのはシェルスクリプトを1個増やして以下のようにする
export ymd0900=`date +%Y%m%d0900`
yotei.py namae $ymd0900
それをcronから呼ぶ

36:名無しさん@お腹いっぱい。
18/08/29 10:03:21.87 .net
>>33
URLリンク(ja.wikipedia.org)
よくあるミス でそのもののようなのあるけど

37:名無しさん@お腹いっぱい。
18/08/29 10:16:33.10 .net
>>34
>>35
どうもありがとうございます!
ファイルを増やしたくなかったので1行でやりたかったんですが、ウィキペディアのその項目のとおり、エスケープ\を入れる事で1行で出来ました!
yotei.py 名前 $(date +\%Y\%m\%d0900)

38:名無しさん@お腹いっぱい。
18/08/30 20:22:06.89 .net
サマータイム導入に気をつけろよ
ローカルタイム使ってると同じ日時が
2回でてくることになるぜ

39:名無しさん@お腹いっぱい。
18/08/31 06:31:36.33 .net
EUじゃサマータイムは廃止だっていうのにマジで日本はこれから導入するのか?
趣味でプログラム作ってるだけなのに余計な処理増えるのはホント困る…。

40:名無しさん@お腹いっぱい。
18/09/09 01:40:34.50 .net
>>22
youtube-dlならニコニコにも対応してるしタイトルとIDそのままで保存できるよ
但しここ数年の動画はDL速度が極端に遅い上に途中で必ず落ちる
[download] 5.6% of 202.83MiB at 98.22KiB/s ETA 33:15[download] Got server HTTP error: Downloaded 12014750 bytes, expected 212678720 bytes. Retrying (attempt 1 of 10)...
ERROR: unable to download video data: HTTP Error 403: Forbidden
永続リトライ設定でもこうなるししmpvでも再生中断するからな
昔のflvなんかは高速だけど年代で仕様が違う辺りエロサイトより酷い

41:名無しさん@お腹いっぱい。
18/09/09 08:27:37.92 .net
東京オリンピックまでにサマータイム導入
てのはどう考えても物理的に不可能だから
話は立ち消えになるだろうけど、将来、
導入されないとも限らない
ローカルタイムを出力するときは必ず
timezoneを付けておいたほうがいい

42:名無しさん@お腹いっぱい。
18/09/09 12:38:12.16 .net
>>40
YAGNI。必要になってから対応するよw

43:名無しさん@お腹いっぱい。
18/09/09 19:40:32.45 .net
あっちのスレめっちゃ荒れてるじゃん

44:名無しさん@お腹いっぱい。
18/09/10 08:35:40.82 .net
>>40
どうやって対応したらよい?

45:名無しさん@お腹いっぱい。
18/09/10 09:38:34.63 .net
>>42
このスレ立てた奴が荒らしに行ってるからな。
あっちの板に嫌がらせで重複スレまで立てるという性格の悪さ。
そういう悪人の立てたこのスレ使ってると、悪人の一味みたいな立ち位置に属することになるぜ。

46:名無しさん@お腹いっぱい。
18/09/10 10:02:10.94 .net
>>43
要件による。どうしたらいいかは客にでも聞いてこい

47:名無しさん@お腹いっぱい。
18/09/10 16:10:33.13 .net
ゴリホーモの嫌がらせ陰湿やなあ

48:名無しさん@お腹いっぱい。
18/09/10 16:45:10.08 .net
なんのためにプログラム板に移動したんんだっけ?
人を増やすため?

49:名無しさん@お腹いっぱい。
18/09/10 21:52:59.04 .net
>>47
前スレで荒らしが出たからIDやワッチョイをつけたかったんだけど、
UNIX板ではつけられなかったから。
で、荒らしはIDつくのが嫌で新スレが立った後からこのスレを立て(>>10-15)、
さらには新スレを荒らしに行ってるってのが現状。

50:名無しさん@お腹いっぱい。
18/09/11 12:13:26.79 .net
でもIDつくのが嫌だったんでしょう?
IDつくのが嫌じゃなくなったってこと?

51:名無しさん@お腹いっぱい。
18/09/11 13:49:11.52 .net
>>49
IDつくと自分が荒らしてることが分かるから嫌だったけど、
向こうのスレについてはスレ自体を敵視しているから、
自分が荒らしてることがバレバレであっても、スレを使いづらくしたい
ってことじゃないかな。

52:名無しさん@お腹いっぱい。
18/09/11 15:12:37.72 .net
でもこのスレも使いづらくしてたんでしょう?

53:名無しさん@お腹いっぱい。
18/09/11 17:42:07.09 .net
>>51
ム板の本スレは意図的に荒らしてて(だからバレてもOK)、
前スレは天然で荒らしてる面がある(だからバレたくない)
って程度の違いはありそうだね。

54:名無しさん@お腹いっぱい。
18/09/12 04:28:30.52 .net
>>52
いやいや、単に荒らしは最初から隠すつもりもなく、
バレようがバレまいが関係ないんだよ。
荒らしにとってはは最初から隠してるわけでもないが、
でもこのスレの住民がその荒らしのIDを見たくて移動したんでしょ?
それでんで、見て何がしたかったのか不明だけどなw
IDが出ていれば荒らされないとでも思った?

55:名無しさん@お腹いっぱい。
18/09/12 08:39:27.35 .net
>>53
荒らしさん、こんにちはー

56:名無しさん@お腹いっぱい。
18/09/12 13:03:52.35 .net
>>54
はい、こんにちは。
やっと気づいた?w

57:名無しさん@お腹いっぱい。
18/09/12 13:57:49.01 .net
IDを何に使うかなんて自明でしょ。
まさか分からないってことはないよな?

58:名無しさん@お腹いっぱい。
18/09/13 04:39:22.11 .net
荒らしをNGIDにして見えなくするため、という説がある
確かにNGIDにすると見えなくなるが、
荒らしの書き込みを止めることはできない
荒らしはどんどん自分の意見を書き込むが
それに対しての反論はできない。
なぜなら荒らしの書き込みが見えないから
荒らしとNGIDに入れてない人とのやり取りでスレは埋まっていく
はたから見れば、話についてこれず時々レスするが
荒らしに論破され何も言い返せない構図のできあがり
それ全体の荒らしの濃度が高まる
そしてIDは変わるから毎日の登録作業が増える。
忘れるとついレスをしてしまう

59:名無しさん@お腹いっぱい。
18/09/13 09:15:51.30 .net
というわけで、以下のどっちかの運用にするのがよくあるパターンだな。
・このIDは昔から粘着してる奴だから無視するぜってコメントを時々入れつつ無視する
・奇特な人物がいちいち反論するので、スレにいる他のメンバーは、連鎖アボーン設定して安心してその議論全体を無視する
IDがないとこういう回避ができないから、ひたすら我慢することになる。

60:名無しさん@お腹いっぱい。
18/09/13 15:25:23.10 .net
連鎖あぼーんって荒らしが誰だれかれ構わずレスしたら
みんな消えちゃうの?

61:名無しさん@お腹いっぱい。
18/09/13 15:40:35.15 .net
それを荒らしにわざわざ教えてやる理由はないな。

62:名無しさん@お腹いっぱい。
18/09/13 15:45:05.41 .net
お前が荒らしだろ

63:名無しさん@お腹いっぱい。
18/09/13 15:45:42.12 .net
バレたかw

64:名無しさん@お腹いっぱい。
18/09/13 15:46:13.40 .net
まあ回線切ってIPアドレスを変えればいいだけだしな

65:名無しさん@お腹いっぱい。
18/09/13 20:00:10.94 .net
>>59
やってみればいいんじゃね?

66:名無しさん@お腹いっぱい。
18/09/13 21:16:50.93 .net
つまりIDやIPアドレスを変えてNG避けする意志のある荒らしってことだから、
IPアドレスも表示させるようにして、
IPアドレスの範囲を使ってNG登録するのもやむなしってことだな。
今でも2つのプロバイダーを使い分けて自演してるって
自分でバラしてたから、NG登録する範囲も2通りは必要だと。

67:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/09/15 09:24:06.05 .net
> grepをフィルタファイルとして別するのが一番楽?
ってのはファイルにgrepのコマンドを書いてreadで読んで
echo ${DATA_REC} ${grep_cmd}
とかにするってことね
grepコマンドが書かれてたら適用
書かれてなかったらスルーって感じ

69:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/09/15 10:04:14.90 .net
もうベタで書いてしまった・・・
でも順調!すげーよく動いてる!
この件は今後の課題にしよう

71:名無しさん@お腹いっぱい。
18/09/15 11:49:54.77 .net
除外する文字列をファイルに入れて
grep -f か grep -v -f でいいような気がする

72:名無しさん@お腹いっぱい。
18/09/15 12:13:24.53 .net
>>66
> シェルスクリプトなのにプログラミング的なことやって
シェル芸じゃなくてスクリプトなんだから
プログラミングで当たり前だよw

73:71
18/09/15 12:37:34.28 .net
>>67
少し考えてみたが、俺もgrepの-fオプションを利用するのが一番楽だと思うな
ただ昔、除外リストの否定とかやりたかったんで書いたことはあるが

74:71
18/09/15 12:43:55.58 .net
grep -f 使えばいいから不要だが
お手軽に>>66のようなことをするのならこうかな
リストにスペースなどが入っていたらうまくいかんがw
文字列の組み立ての参考として
echo ${DATA_REC} | grep $(printf ' -e %s' $(cat list))

75:名無しさん@お腹いっぱい。
18/09/22 07:11:59.06 .net
シェルスクリプトじゃなくてシェルの基礎を訊いてアレだけど
bashの$()と``って使い分けた方がいいの?
端末ではバッククォート多用してるけども

76:名無しさん@お腹いっぱい。
18/09/22 09:23:42.74 .net
``は古い書き方。ネストができないという欠点が有る
bashに限らず、$()を使ったほうが良い。欠点は文字が一文字多くなるだけ

77:名無しさん@お腹いっぱい。
18/09/22 10:20:58.39 .net
きっちりエスケープすればネストはできるよ。もちろん推奨はせんが

78:名無しさん@お腹いっぱい。
18/10/07 11:42:06.75 .net
>>74
URLリンク(mywiki.wooledge.org)

79:名無しさん@お腹いっぱい。
18/10/13 19:33:57.01 .net
URLリンク(imgur.com)

80:名無しさん@お腹いっぱい。
18/11/09 16:05:12.56 .net
test $(date +%w) -eq 5
今日が金曜日なら5が出るんですが、-eq というのはコマンドなのかtestコマンドのオプションなのか、これは何ですか?

81:名無しさん@お腹いっぱい。
18/11/09 16:08:05.57 .net
自己レス
-eq はtestコマンドのオプションで、==の事みたいですね

82:名無しさん@お腹いっぱい。
18/11/09 16:09:52.77 .net
test コマンドの�


83:Iプションです。 ところで今日は金曜日ですが5は出ませんよね。 戻り値は0となりますが……何か勘違いしている気がします。



84:名無しさん@お腹いっぱい。
18/11/09 16:18:31.36 .net
すみません
test $(date +%w) -eq 5 && echo "今日は金曜日!"
これだと、金曜日だとechoが実行されました

85:名無しさん@お腹いっぱい。
18/11/09 16:20:38.51 .net
>>82
自己レス
金曜日かどうか調べて金曜日なら戻り値は0、
で、戻り値が0の場合echoが実行されるって事ですね

86:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/11/10 02:31:24.55 .net
読みづらい。testなんて使うな
[ $(date +%w) -eq 5 ] && echo "今日は金曜日!"

88:名無しさん@お腹いっぱい。
18/11/10 10:01:16.06 .net
>>85
[ ]ってなんですか?
ググろうにも記号なのでググれないです

89:名無しさん@お腹いっぱい。
18/11/10 10:12:06.10 .net
man [

90:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/11/10 19:37:33.60 .net
>>88
[[ ... ]] で使える演算子に <= は存在しない
それは数の比較ではなく
[[ "1" < "=2" ]]
という文字列の比較になっている
なので <= の右に空白を置くと
[[ "1" < "=" "2" ]]
となりエラー
条件式
URLリンク(linuxjm.osdn.jp)

92:88
18/11/10 21:37:24.33 .net
>>89
さっそくありがとうございます
そうか、イコールをつけない不等号で上手く動いてるように見えるのは、文字列として辞書順で比較してるからなんですね
どうやら私の頭の中では、二重丸括弧での算術式展開とゴッチャになってたみたいです
何時間も唸ってたのが一撃でスッキリしました。ありがとうございました

93:名無しさん@お腹いっぱい。
18/11/10 21:45:21.63 .net
記号のコマンドってドットと[以外にもあるんか?

94:名無しさん@お腹いっぱい。
18/11/10 22:29:10.53 .net
>>91
:

95:名無しさん@お腹いっぱい。
18/11/11 00:38:12.80 .net
>>87
もしかしてtestと[]はだいたい同じですか?
testを使わない方がいいのはなぜなんでしょうか?

96:名無しさん@お腹いっぱい。
18/11/11 19:15:20.55 .net
URLリンク(r2.upup.be)

97:名無しさん@お腹いっぱい。
18/11/11 23:47:57.65 .net
>>87
それで出てくるのは /usr/bin[ の方のmanじゃないだろうか

98:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/11/21 22:42:24.51 .net
sedで\1を変数名としていっぺんに異なる部分を異なる変数の内容で変換できませんか?
sed -e "s/<\(.*\)>/${\1}/g"
こんなかんじの

100:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/11/29 18:06:56.14 .net
自己レス
curlだからとか関係ないな。変数にシングルクォートで囲ったものが入ってて、それをダブルクォートで囲った配列展開してるんだから、そのパラメーターはそのままシングルクォートつきになって当然。
しかし、ETAGはダブルクオートを含むしhttpリクエストヘッダはスペースを含むから、全体をシングルクォートで囲まなきゃならんのだよな。
やっぱどのタイミングでどのクォートがどう展開されるのか、一段階ずつ追いかけてみるしかないのかな

103:名無しさん@お腹いっぱい。
18/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:名無しさん@お腹いっぱい。
18/11/29 22:00:40.89 .net
ちなみに "$@" を複数の引数に展開されたくなければ "$*" を使う

105:名無しさん@お腹いっぱい。
18/11/30 06:16:21.18 .net
>>100-101
ありがとう。おかげで、サクッと片付きました。素直に
OPT=('--header' "If-None-Match: ${ETAG}")
curl "${OPT[@]}" "${URL}"
で何の問題もなく動作しました。最初にcurlについて調べてたときにETAGを使う例でシングルクォートが使われてたのに、ずっと脳味噌が引っ張られてたようです。
上の行で変数に入れる時点で、スペースを含む一つの文字列として扱われてるんだから、あとはその中身がなんであるかに関係なく、"$[@]"で展開すればいいわけですね。
ありがとうございました。

106:名無しさん@お腹いっぱい。
18/12/25 18:37:21.02 .net
bashでログ出力処理を一括でやるにはどうすれば良いですか?
powesshellだと、Start-Transcript に対応するコマンドを教えてください

107:名無しさん@お腹いっぱい。
18/12/26 01:04:


108:21.34 .net



109:名無しさん@お腹いっぱい。
18/12/26 08:34:29.57 .net
>>104
何したいかよくわからんって、
パワーシェルでいうStart-Transcriptをやりたいの
bashで一行ずつリダイレクトつけないとダメとかダサすぎる

110:名無しさん@お腹いっぱい。
18/12/26 08:47:38.26 .net
回答ちゃんと読め

111:名無しさん@お腹いっぱい。
18/12/26 09:08:14.92 .net
PowerShellなんぞ興味が無いから知らんという人が多かろう
標準出力と標準エラー出力をファイルとコンソールの両方に出したいと言えばいい
知ってるがお前の態度が気に入らない(AA略)

112:名無しさん@お腹いっぱい。
18/12/26 18:22:57.16 .net
生意気だな

113:名無しさん@お腹いっぱい。
18/12/26 18:30:53.30 .net
ドザはどこ行ってもあれだな

114:名無しさん@お腹いっぱい。
18/12/26 19:04:39.84 .net
ドザがー ドザがー 

115:名無しさん@お腹いっぱい。
19/01/10 14:22:50.61 .net
やっつけ
$ {
> echo foo
> ECHO bar
> } 2>&1 | tee result.txt
foo
ECHO: コマンドが見つかりません

116:名無しさん@お腹いっぱい。
19/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 なら退避目的かなと思うんですが、これは違うので、
意図がわからないです。
ソースはここです。
URLリンク(github.com)

117:名無しさん@お腹いっぱい。
19/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:名無しさん@お腹いっぱい。
19/01/29 01:14:27.65 .net
findした結果を1行づつ配列に代入したい場合にはどうすればよいでしょうか?
当方が書いたshellだと、検索したい文字列に空白があるケースだと
そこで要素が別れてしまいます。
array=$(find ${HOME}/animal -type d -iname "*検索したい文字列*")

119:名無しさん@お腹いっぱい。
19/01/29 12:56:34.68 .net
IFSを改行のみにする

120:112
19/01/30 08:38:21.70 .net
>>113
ありがとうございます!
リダイレクトにstdin/stdoutの差し替え的な使い方があるとか、sttyはstdinを見るとか、sttyがstdinを見てもstdoutを見てもそれが端末を指しているなら同じこととか、数枚目からうろこが落ちました。
しかしそもそもsttyはデフォルトのstdin見ておけばいいんじゃね、とも思ったり。command |man 的な使い方ってあったっけなぁ。

121:名無しさん@お腹いっぱい。
19/02/05 14:26:11.34 .net
少々スレ違いですがお許しください
OS 組み込みの tcsh をバージョンアップしたいのですが、
シェルスクリプトの挙動が変わってしまうのが怖くて、なるべく
コンパイル時オプション(configure オプション)を揃えたいのですが
バイナリしかない場合に、コンパイル時オプションを調べる方法ってないですかね?
## 例えば ISC BIND の -V オプションみたいな

122:名無しさん@お腹いっぱい。
19/02/07 03:39:18.86 .net
少々じゃないくらい違うなあ

123:名無しさん@お腹いっぱい。
19/02/07 03:40:20.92 .net
しかもマルチかよ

124:名無しさん@お腹いっぱい。
19/05/25 14:36:47.91 LVSH0hupc
find -print0した結果を1項目ずつ配列に代入したい場合にはどうすればよいでしょうか?
IFSを\0にしようとしても駄目みたいです。

125:名無しさん@お腹いっぱい。
19/07/27 21:39:15.96 .net
ログインシェルでfishを使う時、
URLリンク(gist.github.com)
できたらやり方教えてください
$ myCommand
タブキー押すと
$ myCommand
foo -- do foo
bar -- do bar
unk -- do toilet
って候補と1行説明表示されて
$ myCommand f
でタブーキー押すと
$ myCommand foo
と補完される
方法を知りたいです
これできたら重いzshから魚に乗り換えられる

126:名無しさん@お腹いっぱい。
19/07/30 12:52:38.09 .net
ここはシェルスクリプトのスレです。
シェルの使い方のスレではありません。
スクリプトの話をしてください

127:名無しさん@お腹いっぱい。
19/07/30 22:27:15.09 .net
具体的に何を語ったらいいの

128:名無しさん@お腹いっぱい。
19/07/31 19:16:20.41 .net
シェルスクリプトだけで実装した一番高速なFizzBuzzはどんなものかとか

129:名無しさん@お腹いっぱい。
19/08/01 10:04:58.33 .net
yash使てる?

130:名無しさん@お腹いっぱい。
19/08/01 14:04:09.49 .net
使えてないという報告は一つもない

131:名無しさん@お腹いっぱい。
19/08/01 22:41:59.49 .net
「使てる(つこてる)?」は「使っていますか?」という意味の質問であって、使用可能かどうかを聞いてる訳では無いのでは

132:名無しさん@お腹いっぱい。
19/08/01 23:04:57.30 .net
真面目君か

133:名無しさん@お腹いっぱい。
19/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:名無しさん@お腹いっぱい。
19/08/05 10:32:33.45 .net
awkとかじゃいかんの

135:名無しさん@お腹いっぱい。
19/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:名無しさん@お腹いっぱい。
19/08/05 11:55:45.48 .net
こうやると
ほにゃらら
ほんじゃらら
あいう
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
かきく
さしす
と出力されました
最後から2行目の「かきく」を出さないやり方が分からないです

137:名無しさん@お腹いっぱい。
19/08/05 12:05:17.31 .net
ブレース展開

138:名無しさん@お腹いっぱい。
19/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:名無しさん@お腹いっぱい。
19/08/05 12:13:50.09 .net
>>133
自分のやり方はなだったらしそうなのでそのキーワード調べてみます

140:名無しさん@お腹いっぱい。
19/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:名無しさん@お腹いっぱい。
19/08/05 12:28:39.74 .net
>>129
cat <<END >index.txt
ほにゃらら
ほんじゃらら
$(printf 'かきく\n%s あいう\n' $(seq 0 5))
さしすせそ
END

142:名無しさん@お腹いっぱい。
19/08/05 12:29:43.26 .net
あ、バックスラッシュが円記号になってしまった...

143:名無しさん@お腹いっぱい。
19/08/05 12:30:25.69 .net
cat > index.txt << "EOF"
ほにゃらら
ほんじゃらら
EOF
printf "かきく\n%s\n" {0..5}あいう >> index.txt
これだと大分短くて出来たけど、数字と「あいう」の間にスペースが入れられない

144:名無しさん@お腹いっぱい。
19/08/05 12:32:03.53 .net
被ってしまった
みなさんありがとうございます
質問ぬしの自分は>>139です
135と136のやり方調べてみます

145:名無しさん@お腹いっぱい。
19/08/05 12:43:19.31 .net
>>137
catで書き出すファイルの中でprintfをやって、そのrintfの中でseqで連番作るんでね
これだとファイルへの書き込みは1回ですみますね
>>136
これも> index.txtで終えれば1回ですみますね
だけどawk難しいです
がんばって135のやり方理解できるようにします

146:名無しさん@お腹いっぱい。
19/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:名無しさん@お腹いっぱい。
19/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:名無しさん@お腹いっぱい。
19/08/05 15:18:57.84 .net
>>143
続き
>>142
さんで教わった{}を使えばよさそうな気がするですがエラーになりました

149:名無しさん@お腹いっぱい。
19/08/05 16:33:57.17 .net
printf "あいうえお"
$ROKU #chomp のように\nを消すパイプ必要だと思う
printf "さしすせそ"

150:名無しさん@お腹いっぱい。
19/08/05 17:18:21.98 .net
>>145
echoじゃなくてprintfなら改行されないからあいうえおに続けて書けますね
だけど、このままだとROKUのところで改行されてしまうからさしすせそは2行目に来ちゃいますね

151:名無しさん@お腹いっぱい。
19/08/05 18:01:04.99 .net
>>129
> と書かれたテキストファイルを作りたいです
こうすれば良いのでは?
cat<<HERE > index.txt
ほにゃらら
ほんじゃらら
かきく
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
さしすせそ
HERE

152:名無しさん@お腹いっぱい。
19/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:名無しさん@お腹いっぱい。
19/08/06 10:37:34.03 .net
>>147
複数行書く方法ありがとうございます
>>148
うまくいきました
ありがとうございます

154:名無しさん@お腹いっぱい。
19/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:名無しさん@お腹いっぱい。
19/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:名無しさん@お腹いっぱい。
19/08/29 05:09:53.11 .net
正しいコード
bash -c '
unset a b
echo 10 | {
read a
let b=a+10
echo $b
}
'

157:名無しさん@お腹いっぱい。
19/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:名無しさん@お腹いっぱい。
19/08/30 06:34:55.40 .net
バグ

159:名無しさん@お腹いっぱい。
19/09/10 19:48:12.68 .net
curlのやり方教えてください
ブラウザのフォームにjsonを書いてポストボタンを押すとokが出るけどターミナルからcurlでやろうとすると、ボディが空だとなり送信出来ません
書き方間違えていますか?
URLリンク(i.imgur.com)

160:名無しさん@お腹いっぱい。
19/09/11 14:49:50.58 .net
ブラウザの開発ツールからcURLでコピーした方が早そうだぞ

161:名無しさん@お腹いっぱい。
19/09/11 15:08:13.17 .net
>>156
どうもありがとうございます
-H 'Content-Type: application/json'
を付けたら動きました

162:名無しさん@お腹いっぱい。
19/09/12 17:05:57.53 .net
アプリの起動判定をしたいんですが
ps -alxw | grep アプリ名
2行より多ければアプリが起動してるんだと思いますけど確実な方法ありますか?

163:名無しさん@お腹いっぱい。
19/09/12 17:48:19.11 .net
killall -0 アプリ名
とか?

164:名無しさん@お腹いっぱい。
19/09/12 19:39:47.90 .net
>>159
どうもありがとうございます
そのコマンドで何も変えらなかったら起動中という事であってますか?

165:名無しさん@お腹いっぱい。
19/09/13 07:33:53.20 .net
起動してないとわかっても、その直後に起動することも有るから
ロックを掛けないと確実にはならないけどな

166:名無しさん@お腹いっぱい。
19/09/14 01:15:30.85 .net
pgrepでええやん、と思ったけど環境依存か

167:名無しさん@お腹いっぱい。
19/09/14 02:03:14.71 .net
>>161
どの環境でも使えるロックの機構ってなにかある?

168:名無しさん@お腹いっぱい。
19/09/14 03:45:32.29 .net
>>163
set -C もしくは mkdir

169:名無しさん@お腹いっぱい。
20/01/20 04:38:26 .net
怒らないで教えて欲しいんだけど何でお前らPowerShell使わないの?
今やPowerShellの方が勉強会でドヤれるしちょまどなんかもPowerShellだってよ

170:名無しさん@お腹いっぱい。
20/01/20 07:42:20 .net
>>165
なんでそんなに無意味な宣伝するの?

171:名無しさん@お腹いっぱい。
20/01/20 13:22:02 .net
>>165
Dockerのalpine、debianなど、ほぼすべてのイメージでことごとく動かないから。
shで十分なのに、PowerShellなんて使いませんよw

172:名無しさん@お腹いっぱい。
20/01/20 15:09:31.95 .net
>>165
linux のコマンド群が使えないから

173:名無しさん@お腹いっぱい。
20/01/21 10:19:02 .net
ソースコードをダウンロードしてビルドしようとしたら…

ERROR: You must either be root or be able to use sudo

ビルドするのに root になれって? この時点で話にならないよ。

174:名無しさん@お腹いっぱい。
20/01/21 11:46:33.77 .net
>>169
それってパワーシェルの話?

175:名無しさん@お腹いっぱい。
20/01/21 21:58:33.32 .net
そのメッセージでググっても、インストール時のメッセージしか見つからないね
URLリンク(www.google.com)
ビルドしようとしたら出たって言うから、
別の話か、嘘つきでは?w

176:名無しさん@お腹いっぱい。
20/01/21 22:20:06.48 .net
>>169
エラーメッセージには「sudo を使え」と書いてあるが

177:名無しさん@お腹いっぱい。
20/01/22 02:27:49 .net
とりあえず適当なことを言ってPowerShellを
貶めたかったんだろ?バレて逆効果になってるがw

178:名無しさん@お腹いっぱい。
20/02/17 09:08:53.72 .net
grep 等の外部コマンド?を使わずに任意の文字列の最初に見つかる3桁の数字を得る方法があれば教えて下さい
(例えば、abc_4_de_99_fgh_ijklm_no_567_2_123_pqrst_uvwx_yz だと567)

179:名無しさん@お腹いっぱい。
20/02/17 12:51:47 .net
bashなら=~と、$BASH_REMATCH使えばできるんじゃね

180:名無しさん@お腹いっぱい。
20/02/17 12:52:43 .net
>>174
おまえは俺かw

似たようなことをやったよ。grepで(笑)

外部コマンドを使わないなら、こうなるから面倒くさいんだよな。
できるけど面倒くさい。だから遅いけどgrepにした。

v=abc_4_de_99_fgh_ijklm_no_567_2_123_pqrst_uvwx_yz
v=${v#"${v%%[0-9][0-9][0-9]*}"}
v=${v%"${v#[0-9][0-9][0-9]}"}

181:名無しさん@お腹いっぱい。
20/02/17 13:01:06 .net
シェルスクリプトだと(bash依存は知らん)
マッチした部分を含めて削除はできるけど
マッチした部分を残したその他を削除が簡単にできないんだよね。

だから「マッチした部分を含めて削除」したら残りが
「マッチしなかった部分」になるのを利用して、
改めて全体から「マッチしなかった部分」を取り除くというのを前後でやればできる。

182:名無しさん@お腹いっぱい。
20/02/19 01:25:53 .net
ありがとうございます
面倒でも前後から不要部分を取り除くしかないのですね

183:名無しさん@お腹いっぱい。
20/02/19 03:44:34.80 .net
「マッチした部分を含めて削除」ってどうやるの?

184:名無しさん@お腹いっぱい。
20/02/19 07:39:09.82 .net
>>179
${v%%[0-9][0-9][0-9]*} ってかいてあるやん
abc_4_de_99_fgh_ijklm_no_567_2_123_pqrst_uvwx_yz ・・・(1)
↓ ${v%%[0-9][0-9][0-9]*}
abc_4_de_99_fgh_ijklm_no_ ・・・(2)
↓ (1)ー(2)
567_2_123_pqrst_uvwx_yz ・・・(A)
↓ ${v%"${v#[0-9][0-9][0-9]}"}
_2_123_pqrst_uvwx_yz ・・・(B)
↓ (A)ー(B)
567

185:名無しさん@お腹いっぱい。
20/02/19 12:18:21 .net
>>180
丁寧にありがとう!

186:名無しさん@お腹いっぱい。
20/02/21 17:55:59.15 .net
今更だが>>180
× ${v%"${v#[0-9][0-9][0-9]}"}
○ ${v#[0-9][0-9][0-9]}"
だな

187:名無しさん@お腹いっぱい。
20/02/22 16:29:53 .net
それらをPowerShellで書くとどうなるか?
一度でも考えてみたことはありますか?

188:名無しさん@お腹いっぱい。
20/02/22 16:45:28.02 .net
PowerShellで書くとLinuxで動かすのが大変になります。

189:名無しさん@お腹いっぱい。
20/02/26 03:34:54.75 .net
5年くらいするとセキュリティパッチが出なくなって使用禁止になるから
また作り直しになるんだろうどうせ。

190:名無しさん@お腹いっぱい。
20/03/13 23:32:50.67 .net
例えば中身が
3,soba,inarizusi,hishimoti,ushioziru ...
のcsvファイルなら最初の数字が3なので以下の文字列の3番目をつないで soBa inArizusi hiShimoti usHioziru ... でbash ... というように
csvファイルの最初の値で以降の処理が変わる場合はどうすればいいでしょうか?
一度ファイルを最後まで空読みすれば簡単なのですが、読み込みは1度で終わらせたいです。

191:名無しさん@お腹いっぱい。
20/03/14 16:01:32.08 .net
宿題は自分でやりなよ

192:名無しさん@お腹いっぱい。
20/03/14 17:54:51 .net
>>186
なんでそんな分かりづらい説明するんだ?

193:名無しさん@お腹いっぱい。
20/03/14 17:55:37 .net
全く意味がわからん。
誰か翻訳してくれ

194:名無しさん@お腹いっぱい。
20/03/14 18:20:44 .net
>>186
引数で単語と数字nを受け取ってn文字目の単語を返す関数を書けばいいだけ

195:名無しさん@お腹いっぱい。
20/03/14 18:34:21 .net
>>190
日本語ではなくてbashでお願いします!!

196:名無しさん@お腹いっぱい。
20/03/14 18:41:35 .net
>>189
結果だけ見たら

入力テキストをカンマで区切って
最初の数値を取得 ⇒ nとする
残りの文字列のn番目の文字をアッパーケースに変換して空白区切りで連結する

かな
俺ならテキストが小さいならBashで一気に読んで処理すればいいと思うしでかいならPythonとかで処理する

197:名無しさん@お腹いっぱい。
20/03/14 20:00:13 .net
> 俺ならテキストが小さいならBashで一気に読んで処理すればいいと思うしでかいならPythonとかで処理する
これはなんで? 小さいとかの境目はどれくらい?

198:名無しさん@お腹いっぱい。
20/03/14 20:15:35 .net
そんなこと聞いてくるようではセンスがないよ
センスがない奴にいくら説明しても無駄

199:名無しさん@お腹いっぱい。
20/03/14 20:18:24 .net
pythonだと単語のn文字目を取り出すなんて朝飯前だしな
関数書く手間が一つ省ける

200:名無しさん@お腹いっぱい。
20/03/14 20:24:34 .net
疑問になった点は「テキストが小さいなら」です。
その他の話は聞いてません。

201:名無しさん@お腹いっぱい。
20/03/14 20:26:37 .net
> pythonだと単語のn文字目を取り出すなんて朝飯前だしな

単語の3文字目(オフセット2から1文字)を取り出す
echo "${str:2:1}"

Pythonだとどう朝飯前なんですか?

202:名無しさん@お腹いっぱい。
20/03/14 20:48:13 .net
早く答えのスクリプトを書いてください!!
遅いですよ!!

203:名無しさん@お腹いっぱい。
20/03/14 21:05:30 .net
>>196
個人的には今どきなら1MB以下なら小さい1GB以上ならでかい
その間ならケースバイケース
PCの性能やメモリ容量とかと相談

204:名無しさん@お腹いっぱい。
20/03/14 21:19:09 .net
>>186
> 一度ファイルを最後まで空読みすれば
これはどういうスクリプトなの?

205:名無しさん@お腹いっぱい。
20/03/14 22:00:38.59 .net
>>199
1MBってことは、1行256バイトとして4096行以下なら小さいってことですね。
10MBで約4万行、100MBで約40万行、1GBで400万行
昔のExcelの制限が1シート65000行だったことを考えると
エクセルで扱えるデータなら問題なさそうですね

206:名無しさん@お腹いっぱい。
20/03/14 22:38:14.38 .net
アスペかよw
アスペならちゃんと改行コードも数えるんだぞ?

207:名無しさん@お腹いっぱい。
20/03/15 13:40:07 .net
>>202
お前なんのためにレスしたの?
>>201が言ってることは正しいし、お前の主張は何も含まれていない。
ただ、レスしただけ

208:名無しさん@お腹いっぱい。
20/03/20 18:13:05 .net
185です。説明不足ですみません。
やりたいことは1行目を読み取り、2行目以降はそのままwhileループで最後まで読みたいのです。
ただそのためだけにフラグを使うのもなんだかなぁと。

209:名無しさん@お腹いっぱい。
20/03/20 19:59:54 .net
わざわざ空読みする理由が分かんねえ
今出来てる状態のスクリプト貼って何がうまく行かないのか説明してみ

210:名無しさん@お腹いっぱい。
20/03/21 00:02:26 .net
#!/bin/sh

お願いします

211:名無しさん@お腹いっぱい。
20/03/21 00:18:20 .net
>>206
そこまでは上手く書けてる
その調子で頑張れ

212:名無しさん@お腹いっぱい。
20/03/21 13:58:51.87 .net
>>191
今日一番ワロタ
キミもbashで質問しなよ

213:名無しさん@お腹いっぱい。
20/03/21 14:07:34.22 .net
bash は重複しない4文字である。つまり2bitのデータと考えられる
日本語を1文字16bitのデータと考えると、
1文字をbashの4文字×8組=32個のデータで表現できる
つまりbashで質問すると32倍のデータが必要になる
1レスに2048バイト、1024文字を書き込めるから32文字の質問であれば
bashで質問することは可能

214:名無しさん@お腹いっぱい。
20/03/21 15:26:35 .net
向いてないんだろ
こういうの

215:名無しさん@お腹いっぱい。
20/03/22 10:34:31.24 .net
>>209
> 1文字をbashの4文字×8組=32個のデータで表現できる
この行から間違えてるだろ

216:名無しさん@お腹いっぱい。
20/03/22 17:21:49.94 .net
>>200
こいうんじゃね?
というのを期待してた?残念w

217:名無しさん@お腹いっぱい。
20/03/23 20:28:21 .net
>>212
while IFS=, read は思いつくけど
最後まで空読みってどんな処理なのか気になっただけ

218:名無しさん@お腹いっぱい。
20/03/24 21:32:10 .net
>>197
>>> str = "foobarbaz"
>>> print(str[3])
b

python3は重いかわりに色々便利なのが定義されてる

219:名無しさん@お腹いっぱい。
20/04/04 22:32:04.93 gwOVmDRaJ
未経験から半年でフリーエンジニアになれる人の特徴
URLリンク(www.youtube.com)
フリーランスか会社員かどっちが簡単かについての最終回答
URLリンク(www.youtube.com)
【エンジニア】正社員/派遣社員/フリーランスのメリット・デメリットについて
URLリンク(www.youtube.com)
月収1000万円オンラインサロンオーナーの日常【飲み過ぎ】
URLリンク(www.youtube.com)
借金400万円から人生逆転するまでの軌跡
URLリンク(www.youtube.com)
エンジニアはお金を追求してはいけないという年寄りを論破してみた
URLリンク(www.youtube.com)
プログラミングスクールを否定する老害どもについて
URLリンク(www.youtube.com)
新人叩きしてる古参勢がすぐ儲からなくなる理由
URLリンク(www.youtube.com)

220:名無しさん@お腹いっぱい。
20/04/11 10:24:56 .net
タブで字下げされてるテキストファイルの中にある
_TAG("S.T.A.R.T") が含まれる行と
_TAG("E.N.D") が含まれる行との間にある行数を数えるにはどうすればいいでしょうか

221:名無しさん@お腹いっぱい。
20/04/11 11:20:47.30 .net
...... | sed -n '/_TAG("S.T.A.R.T")/,/_TAG("E.N.D")/p' | wc -l
こんな感じ

222:名無しさん@お腹いっぱい。
20/04/12 07:36:15.54 .net
さんくす
sedやwcなどの外部コマンド?を使わない方法はありますか?

223:名無しさん@お腹いっぱい。
20/04/12 07:43:15.09 .net
宿題は自分でやろう

224:名無しさん@お腹いっぱい。
20/04/12 13:13:39.28 .net
>>218
そういうことするなら
perl5に行きなよ
普通はそれも最初から入ってて、文字処理に強い言語だから
---
そんな処理だと、その処理の前に
タグがネストしてたり、正しく対になっているのか調べれた方が安全
おみあげに類似したコードあげる
URLリンク(ideone.com)
対が壊れてたら -1 を
壊れてないならネストの最大の深さを返す

225:名無しさん@お腹いっぱい。
20/04/12 17:00:27.78 .net
>>220
ダクネスが居たように見えた

226:名無しさん@お腹いっぱい。
20/04/13 19:58:42 .net
>>216
問題の意図が明確
その _TAG("S.T.A.R.T") とかは字下げされているのかどうなのか
_TAG("S.T.A.R.T") が含まれてると言うが、
一行 は _TAG("S.T.A.R.T") だけではないのか?
echo ' _TAG("S.T.A.R.T")' なんかも考慮する必要あるのか?

俺だったら一行まるまる、_TAG("S.T.A.R.T") だけにするがな
その方がパースしやすいので

227:名無しさん@お腹いっぱい。
20/04/13 19:59:20 .net
あと _TAG("S.T.A.R.T") は複数あるのか?という質問も追加
ネストされている場合は考慮するのか?とか

228:名無しさん@お腹いっぱい。
20/04/13 20:01:47 .net
まあいずれにしろテキストファイルは read で読み込めるんだから
こんな感じになるだろうが

while IFS= read -r line; do
 case $line in
  '_TAG("S.T.A.R.T")') なんとか ;;
  '_TAG("E.N.D")') かんとか ;;
 esac
 if 条件; then
  count=$((count + 1))
 fi
done < テキストファイル

229:名無しさん@お腹いっぱい。
20/04/13 20:03:02 .net
>>220みたいにそういう場合だったら Perl にとかいうやつがいるけど
シェルスクリプトで同等のコードを書いても大差ないんだけどなw

230:名無しさん@お腹いっぱい。
20/04/13 21:07:49.84 .net
sedやwc使うなとかいう制約も謎だわ
言語やツールが何であれ�


231:給ヌ裏で似たようなライブラリの関数呼び出すのに



232:名無しさん@お腹いっぱい。
20/04/13 21:38:58 .net
理由がわからないなら普通に聞けばいいだけなのに。
自分が知らないだけなのに、なんでそんなことありえない、
あってたまるかみたいな書き込みをするんだろうねw

233:名無しさん@お腹いっぱい。
20/04/13 22:33:21.03 .net
理由がわからないんじゃなくて、そんなことを言い出す人間が理解できないって話だよ
こだわりがあるならこんなところで人に聞くんじゃないよって話で

234:名無しさん@お腹いっぱい。
20/04/13 22:41:09.86 .net
自分とは違う方針の質問は受け付けない
そんなレスはこてんぱんにしてやる。ですか?

235:名無しさん@お腹いっぱい。
20/04/13 23:40:18.71 .net
自分の期待とは違う方針の回答は受け付けない
そんなスレはこてんぱんにしてやる。じゃないの?

236:名無しさん@お腹いっぱい。
20/04/14 04:36:43 .net
>>229
スレの流れ見たけど受け付けられてるじゃん
宿題を済ませたいのか知らないが
人に聞くくらいなら針路変更したらどう?
知り合いにコンピューターの勉強してた人居るけど
大学で課題をすべて友人からパクってたそうだ
今その人バイトで食いつないでる
ITの仕事できたら低くても年収400万は行ったろうにね

237:名無しさん@お腹いっぱい。
20/04/14 07:50:06 .net
>>231
知り合いの人は大学をやめて会社を起こして金持ちになったよ。
お前が何をいいたいのか知らんが

238:名無しさん@お腹いっぱい。
20/04/14 07:52:02 .net
>>230
さんくすとお礼を言った上に、条件をつけ忘れてたから
補足しただけでしょ

たったそれだけで、はぁ?理解できない。謎だわ。なんでそんな事するの?バカなの?
みたいに言うのはなんで?

239:名無しさん@お腹いっぱい。
20/04/14 08:10:41 .net
>>232
知り合いは宝くじ当たったよ

中卒、高卒、大卒の平均年収見てみ

240:名無しさん@お腹いっぱい。
20/04/14 08:12:21 .net
問題を解決できないやつは
学歴がなんでも大成しないな

241:名無しさん@お腹いっぱい。
20/04/14 08:16:49 .net
2chは口が悪いやつが多いけど
ここ見てると分かるように無償で相手してくれるやつがいるんだな
現実はどうだろう

そんなことないよ

社会に出れば分かるがフリーライダーは受け入れられない
街角でスケッチブックに助けてくださいって掲げるのか?
そんなの通報されて終わるよ
SNSなら答えてくれるって?
フォロワーも居ない人の相手なんて誰もしない
要するに2chしか質問する先がないんだ

242:名無しさん@お腹いっぱい。
20/04/14 08:18:35 .net
>>233
何で逆切れするの?
仕事は自分でしましょう

243:名無しさん@お腹いっぱい。
20/04/14 08:24:13 .net
>>233
>>229があなたの書き込みなら
あなたが煽っただけでしょう
そして>>229があなたではないなら
なぜそんな反応するのか分からない

244:名無しさん@お腹いっぱい。
20/04/14 08:26:10 .net
課題か仕事か知らんが問題を片付けてくれたのになぜ素直になれないんだろうか
仕事だったら出来上がらないから検収されずに報酬もらえないぞ

245:名無しさん@お腹いっぱい。
20/04/14 08:29:48.56 .net
JavaHouseってのがあって明らかに仕事に関係するであろう質問してた輩に
運営者の人がそれ幾らなのって聞いてたな
聞いた本人は無料ですってなんか意味の分からんこと言ってたが

246:名無しさん@お腹いっぱい。
20/04/14 08:31:37.22 .net
>>234
宝くじワロタ

247:名無しさん@お腹いっぱい。
20/04/14 08:44:03.74 .net
>>232
それは単にその人が優秀だっただけ

248:名無しさん@お腹いっぱい。
20/04/14 09:06:13 .net
課題をこなせず大学をやめて成功したって丸投げ派遣会社でも設立したんか

249:名無しさん@お腹いっぱい。
20/04/14 10:27:17.89 .net
>>242
人の話がシェルスクリプトと何の関係があるのという話だ
人の話をし始めたやつにいえな

250:名無しさん@お腹いっぱい。
20/04/14 11:48:50.47 .net
宿題は自分でやりましょうってことだけじゃ

251:名無しさん@お腹いっぱい。
20/04/14 12:53:01 .net
>>245
全ての質問に対してそういう回答をしてるなら何も言わんよ

252:名無しさん@お腹いっぱい。
20/04/14 16:26:20 .net
>>232
まあ今どきの日本人はだいたいビル・ゲイツは知り合いだからなw

253:名無しさん@お腹いっぱい。
20/04/14 16:29:02 .net
>>246
でたでたw
なぞの平等理論w
あいつだけずるいとかいう妬みで周りが見えなくなってるんだろうなあ

254:名無しさん@お腹いっぱい。
20/04/14 16:51:38 .net
自分なら質問者が
「今こうやってるけどもっと効率のいい方法ない?」
とか聞いてきたら答えてあげたくなる

一度答えてそーじゃねーよとか言われたら・・・w

255:名無しさん@お腹いっぱい。
20/04/14 17:19:48.25 .net
一度答えてそーじゃねーよと言われたら?
↓これみて「そーじゃねーよ」言われたと思っちゃったの?
215 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2020/04/11(土) 11:20:47.30
...... | sed -n '/_TAG("S.T.A.R.T")/,/_TAG("E.N.D")/p' | wc -l
こんな感じ
216 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2020/04/12(日) 07:36:15.54
さんくす
sedやwcなどの外部コマンド?を使わない方法はありますか?

256:名無しさん@お腹いっぱい。
20/04/14 17:20:54.13 .net
沸点が低いんだろうなぁ。
少しでもなにか言われたら、親を侮辱されたかのように感じるんだろうな

257:名無しさん@お腹いっぱい。
20/04/14 17:27:27.07 .net
なんとなく答える前に
sedやwcなどの外部コマンド?を使わない方法はありますか?
と書いても、同じようにキレていそうな気がするなw

258:名無しさん@お腹いっぱい。
20/04/14 17:38:50 .net
3連投かよw
そんなに悔しかったのかよw

259:名無しさん@お腹いっぱい。
20/04/14 18:07:42.02 .net
レスしただけでこの反応w 矛先をずらしているのもありがちだなぁw

260:名無しさん@お腹いっぱい。
20/04/14 23:33:18.21 .net
>>222-223
その _TAG("S.T.A.R.T") とかも字下げされてます
echo ' _TAG("S.T.A.R.T")' なんかも考慮する必要はありません
_TAG("S.T.A.R.T") は複数ありません
ネストもありません
>>224
可能ならman bashで出る内容だけで解決したいです。
_TAG("S.T.A.R.T")や_TAG("E.N.D")の前後にも行はあるので、わかりやすく
_TAG("S.T.A.R.T")なんとか
  count=$((count + 1))
_TAG("E.N.D")かんとか
ならベストなのですが。

261:名無しさん@お腹いっぱい。
20/04/15 00:16:02.16 .net
>>255
while文で1行ずつ読んでSTART見つけたところからカウントしていってENDが見つかったら終了すりゃいいだけじゃないの
自分でどこまで作ったの?

262:名無しさん@お腹いっぱい。
20/04/15 00:37:48.24 .net
>>256
もういいから早くスクリプト作れって言ってんだよ

263:名無しさん@お腹いっぱい。
20/04/15 00:47:14.66 .net
>>257
なら今からman bash読むわ
ちょっと量が多いから1週間待ってな
忘れるといかんからまたその頃に催促してくれ

264:名無しさん@お腹いっぱい。
20/04/15 08:44:47.78 .net
>>257
おまえ志賀だろ
あわしろさんに謝れ

265:名無しさん@お腹いっぱい。
20/04/16 00:36:27 .net
>>255の後半からはawkのセンスありと見た

266:名無しさん@お腹いっぱい。
20/04/16 07:29:49 .net
自分で man 読んで自分で出来るようになる方が自分にとって有益だと思うんだが…

267:名無しさん@お腹いっぱい。
20/04/16 12:09:07 .net
awkでやればできるよ!・・・全部BEGIN
これ萎えるw

268:名無しさん@お腹いっぱい。
20/04/17 09:28:05 .net
フレッシュなニンニクジュースを飲めばコロナの菌が死滅する

269:名無しさん@お腹いっぱい。
20/04/19 04:34:10.20 .net
この板の住民なら生ニンニクで腸内細菌死滅して病院送りになるのは知ってそう

270:名無しさん@お腹いっぱい。
20/04/19 04:48:20.74 .net
言うほどUNIXやシェルスクリプトってコロナ菌に関係あるか?

271:名無しさん@お腹いっぱい。
20/04/19 13:15:29 .net
[ と [[ の違いなんかも理解できてないままflgやcontinueを使って書いてみました。
_TAG("S.T.A.R.T")の後でもループの度にflgをチェックするのが無駄なので
_TAG("S.T.A.R.T")を探すループと_TAG("E.N.D")まで行数を数えるループを完全に分けてflgを無くしスッキリ出来たらいいのですが。
declare -i i=0
declare -i flg=0
for f in `cat $INPUT_FILE`
do
if [ $flg == 0 ]; then
if [[ "$f" =~ \t*'_TAG("S.T.A.R.T")' ]]; then
flg=1
else
continue
fi
else
if [[ "$f" =~ \t*'_TAG("E.N.D")' ]]; then
echo 行数は $i
exit 0
else
i=$i+1
fi
fi
done

272:名無しさん@お腹いっぱい。
20/04/19 22:46:59.99 .net
>>266
> ループを完全に分けてflgを無くしスッキリ出来たらいいのですが。
まず for f in `cat $INPUT_FILE`を使うのはやめよう
シェルスクリプトでテキストファイルを読むならwhile + read を使う
そしてread は read してから read すると次の行を read する(当たり前だw)

273:名無しさん@お腹いっぱい。
20/04/26 02:43:28.05 .net
一応それらしいのを書いてみました。
exitがあるのと、whileループの前と中にreadがあるのがちょっと不満です。
後チェックができるように do; read; while という使い方ができればいいのですが。
declare -i i=0
while : ; do
read f <- 不要かも
while [[ !("$f" =~ \t*'_TAG("S.T.A.R.T")') ]]; do
read f
done
read f
while [[ !("$f" =~ \t*'_TAG("E.N.D")') ]]; do
i=$i+1
read f
done
echo 行数は $i
exit
done < $INPUT_FILE

274:名無しさん@お腹いっぱい。
20/04/26 07:48:46 .net
そもそも done < $INPUT_FILE とか書く必要ない

script.sh < $INPUT_FILE とやればいいんだよ
その方が柔軟性が高くなる

そうすりゃスクリプトは中身だけで良くなる。endはいらない。
そして while read do にも置き換えられるやろ?

read f <- 不要かも

while [[ !("$f" =~ \t*'_TAG("S.T.A.R.T")') ]]; do
 read f
done

read f
while [[ !("$f" =~ \t*'_TAG("E.N.D")') ]]; do
i=$i+1
read f
done
echo 行数は $i

275:名無しさん@お腹いっぱい。
20/04/26 07:49:15 .net
× endはいらない。
○ exitはいらない。

276:名無しさん@お腹いっぱい。
20/04/26 13:23:56.84 .net
後出しっぽくてすみません。
$INPUT_FILE は_TAG("S.T.A.R.T")や_TAG("E.N.D")と同じく固定名なので汎用性は不要なんです。
それにこの部分はscriptの一部で本体には引数があるため毎回script.sh 引数 < $INPUT_FILE とやるのはちょっと...
といって、このためだけに分割するのも...

277:名無しさん@お腹いっぱい。
20/04/26 16:11:10.53 .net
じゃあ
{
なかみ
} < "$INPUT_FILE"
とかすればいい

278:名無しさん@お腹いっぱい。
20/10/27 23:15:06.07 oDaI72SOc
サイボウズ式:会社員でもフリーでもない、その中間ぐらいの生き方を模索しているところです
URLリンク(www.huffingtonpost.jp)
「社員全員が副業」を体現し普及するスタートアップ、売上前年比4倍が物語る今後
URLリンク(newswitch.jp)
サイボウズの「副業したい人、採用します」戦略。正社員募集では見つからない“異能”の採り方
URLリンク(logmi.jp)
10月より週休4日制度に移行します。
URLリンク(note.mu)
「週休4日」や「1日5時間勤務」も可能に。アクセンチュアが、新たな勤務制度を取り入れた理由
URLリンク(www.huffingtonpost.jp)
フリーランスは増加した。でも「奴隷的」会社員の延長では社会は不自由なままだ。
URLリンク(www.huffingtonpost.jp)
秩父・横瀬町にWeb業界のクリエイターが集結! 地域がひとつになったクリエイティブソン
URLリンク(careerhack.en-japan.com)
自称「日本一の駅の待合所」はいったいドコがスゴいのか
URLリンク(headlines.yahoo.co.jp)
書店内の本が読み放題!新しいオフィス形態「BOOK&OFFICE 文悠」
URLリンク(headlines.yahoo.co.jp)
会社を辞めてフリーランスで働きたいあなたが知っておくべき10のこと
URLリンク(www.businessinsider.jp)
フリーランスと会社員、働き方の根本的な差 広がる「雇用されない働き方」の課題とは何か
URLリンク(toyokeizai.net)

279:名無しさん@お腹いっぱい。
20/12/09 09:14:48.51 .net
URLリンク(i.imgur.com)

280:名無しさん@お腹いっぱい。
21/03/01 22:58:36.48 .net
$ eval "<"
bash: 予期しないトークン `newline' 周辺に構文エラーがあります
これってどういうこと?

281:名無しさん@お腹いっぱい。
21/03/02 03:17:30.34 .net
予期しないトークン が出てきたんだろ

282:名無しさん@お腹いっぱい。
21/03/02 09:29:15.67 .net
そりゃ < をbashに渡すから
$ <
と同じ結果になる訳で

283:名無しさん@お腹いっぱい。
21/03/02 11:20:08.32 .net
おふたりありがとう
たしかに
$ <
と同じ結果になった
でもnewlineというのはどこにも記述してないのにどうして `newline' なんだろう?と

284:名無しさん@お腹いっぱい。
21/03/02 11:55:19.88 .net
英語の勉強をしましょう

285:名無しさん@お腹いっぱい。
21/03/02 12:14:10.37 .net
>>278
パーサーが入力の「末尾」も改行文字と同じに扱っている
または入力末尾に改行文字を追加してからパースしている
といったところじゃないかな

286:名無しさん@お腹いっぱい。
21/03/02 12:48:18.17 .net
あー、そういうことか、なるほどわかりました
日本語の中に突然newlineが出てきて、しかもわざわざクォートされてるからてっきり予約語かと思い込んでいた
というか目に見えない予約語なんだろうけど
ありがとうございます

287:名無しさん@お腹いっぱい。
21/03/02 16:21:26.89 .net
わかっとらんやんけ!

288:名無しさん@お腹いっぱい。
21/03/14 10:53:57.86 .net
>>165
win鯖管か個人用途のみで使うなら7系はいいものだと思うけど、数百MB食うpwshがunix界隈で受け入れられるとはとても思えない
まあ新興非b系シェルは駆逐されるかもしれんが
そもそもまだMacとlinux主要ディストロにしか公式対応してないので
IT職でなく、単にツールキットを享受できればいい人ならpwshでいいと思うよ
たとえ趣味や仕事でも(だけど時代遅れな)b系シェルの技能は汎用性あるから、あえて普段から使うのも勉強になるよ

289:名無しさん@お腹いっぱい。
21/03/14 10:59:38.87 .net
あと怒涛の互換性ブチ壊しバージョンアップ中だから、せっかく書いても一年で動かなくなる
まだソフトウェア開発には使えないのが現状

290:名無しさん@お腹いっぱい。
21/03/14 17:45:37.35 .net
シェルスクリプトの特徴は「人間がそのまま読むことが出来る1行1データのテキストを扱う」という点なんだわ
シェルスクリプトは分かりづらいからPerlやPythonを使うとか言ってるやつがいるけど
1行1データのテキストを扱うならば、シェルスクリプトが一番うまく処理できる
正確に言えば、シェルスクリプトだけじゃなくてUNIX系のCLIコマンドがそれを前提としたインターフェースになってる
CLIコマンド=シェルスクリプトのAPIなんだよ
pwshがunix界隈で受け入れられないのは、APIが全く違っていて互換性がないから
API=CLIコマンドなので、プログラマの多くはAPIコマンドを知ってる
シェルスクリプトがいつまでたってもPerlやPythonに置き換わらないのも
それらの言語はCLIコマンドというAPIを使わないから
CLIコマンドを使うならば、シェルスクリプトより簡潔に書ける言語が存在しない

291:名無しさん@お腹いっぱい。
21/03/31 10:37:33.90 .net
シェルなんだから外部コマンドは呼べるし、テキストも扱えるしそんなに変わらんのでは
そんなに変らんということはすなわち、わざわざunix環境で使うモチベとしては弱いと思うが
ドザーが流行りのwsl使うのには便利なんじゃね

292:名無しさん@お腹いっぱい。
21/03/31 10:41:33.46 .net
昔ながらのwinコマンドは大体外部コマンドだけど、pwshはほとんど組み込みコマンドなのがなあ
slsとか分けて提供してくれればbetter grep/findとして個人的には使いたいんだが

293:名無しさん@お腹いっぱい。
21/03/31 22:49:44.43 .net
>>286
Windowsのコマンドはスクリプトから使うことを考慮されてない物が多い
例えば、copyコマンドは、copyすると
1 個のファイルをコピーしました。
とか人間のためのメッセージが出てくるからテキスト処理に向かない
バッチファイルは人間が操作するのと同じことただやるだけ
(出力を加工しない)なのでバッチファイルから使う分にはそれでもいいが
シェルスクリプトのように出力と入力をつないで処理することには向いていない
だからpwshはWindowsのコマンドを呼び出さない
一方pwshで使うAPIは1行1データのテキストにはなってないし
普段使ってる外部コマンドではない
どちらかと言えばPythonなどの関数に近い
Unix/Linuxの外部コマンド・・・1行1データのAPIインターフェースでCLIからも参照する
pwsh、Python、多くの言語・・・引数と戻り値のAPIインターフェースで言語内から参照しない
APIのインターフェースが大きく違っていて
Unix/Linuxの外部コマンドは改行の扱いが難しいなどの制限があるが
その制限の範囲内ではスクリプトからも人間からも使いやすくて
他の言語には置き換えることが出来ないんだよ

294:名無しさん@お腹いっぱい。
21/04/01 00:40:09.95 .net
Windowsでシェルスクリプト動かそうとすると、パスの\のエスケープで気が狂いそうになるから
その辺捨てたパワーシェルの割り切りは、それはそれで理解できるけどなー

295:名無しさん@お腹いっぱい。
21/04/01 01:14:08.37 .net
>>289
Windowsでシェルスクリプトって何を使ってるの?
パスの\のエスケープなんかしたことないよ
pwshはスクリプト言語としては悪くないと思うよ
ただPythonなんかと同じようなプログラミング用の言語ということ
Pythonにも当てはまるけどプログラミング用の言語は
シェルスクリプトとはスタイルが異なる。
シェルスクリプトは端末操作に特化した言語だから
プログラミングはしにくいが端末操作は得意
まあPowerShellでも普段からコマンドレット使って端末操作してます。
pwshでもコマンドレットをメインで使いますって人なら
シェルスクリプトと同じような感じに見えるかもしれないけど
そんな人いるのかな?

296:名無しさん@お腹いっぱい。
21/04/01 03:02:34.14 .net
>>290
Windowsはダブルクォートの直前にバックスラッシュがある場合のみエスケープとして扱うということに一応なってる。
しかし実はWindowsではダブルクォートも引数の区切りも解釈するのはアプリケーションの仕事なので実は上記のように解釈される保証はない。

297:名無しさん@お腹いっぱい。
21/04/01 06:04:39.51 .net
>>291
アプリケーションの仕事って言うなら、
パワーシェルから呼び出したときも同じじゃん・・・

298:名無しさん@お腹いっぱい。
21/04/14 16:39:38.83 .net
int main( int argc,char **argv){ printf("%s\n",argv[1]); return 0;}
みたいなプログラムを書いて
a.exe "abc xyz"
みたいに実行しても処理系によって出力が
"abc xyz"
だったり
abc xyz
だったり
"abc
だったり…そんな時代もあったね。

299:名無しさん@お腹いっぱい。
21/04/17 04:15:34.67 1C2XvsMVm
第一生命HD、副業解禁 約1万5000人対象
URLリンク(www.nikkei.com)
第一生命HD、副業解禁 1万5000人対象―大手生保初
URLリンク(www.jiji.com)
IHI、国内8000人の副業解禁 重厚長大企業も転機
URLリンク(www.nikkei.com)
IHI、社外兼業を解禁 社内副業もルール化
URLリンク(www.jiji.com)
50代に時給5000円の求人も。都会の会社員、“地方企業でリモート副業”が人気
URLリンク(nikkan-spa.jp)
「週休3日制」導入は拡大するのか? 働き方が多様化する社会で生き抜く力
URLリンク(news.yahoo.co.jp)
スカイマーク、週休3日制へ 来春にも事務職対象
URLリンク(www.chunichi.co.jp)
週休3日制で何が変わる?休みが増えるメリット・デメリット
URLリンク(career.joi.media)
週休3日制に賛成?反対? 東芝の模索
URLリンク(www.nhk.or.jp)

300:名無しさん@お腹いっぱい。
21/04/20 16:39:52.31 .net
SSDがいっぱいになってきたのでfind�


301:ナ各binを周りfileが吐いたリストをunstripped(だったか?)でgrep&stripするスクリプト書いた 半分くらいになるのなこれ… 今の所不具合は出てないからヨシ おすすめ



302:名無しさん@お腹いっぱい。
21/04/20 16:48:14.77 .net
>>290
ubuntuだけどbashからpwsh -cで便利なツールとして使うのがベスト
多少最適化されてそうなapt提供のプレコンパイル版でも60MiBあるから配布時依存に加えるのは厳しいのが悩み
私的ハックにはすごく重宝

303:名無しさん@お腹いっぱい。
21/04/20 16:53:51.68 .net
>>289
`をエスケープに選んだのは英断だと思う
m4と協調させようと思うと壊れるけど、まあm4のクオートは簡単に変えれるし満足

304:名無しさん@お腹いっぱい。
21/04/20 16:55:18.39 .net
>>295
golang製のバイナリってstripすると壊れるんじゃなかったっけ

305:名無しさん@お腹いっぱい。
21/04/20 17:07:12.66 .net
>>298
マジかー!でも何がgoとか把握してない…
内蔵HDDの方はテラ余裕なのでそっくりコピーしてある、万が一あってもそっちからブート&コマンド全て使えるから問題起きてからでもいいかな…

306:名無しさん@お腹いっぱい。
21/04/20 18:04:12.33 .net
学習コスト高そうだから何でも賢くキャストしてくれるキャスト器として使ってるわ
[xml]'<foo>...'くらいのカジュアルユース
年だからjqとか付いてけないしjsonもキャストして.付けてるタブ補完連打でアクセス
ただの型コレクションとして気兼ねなく使えばいい

307:名無しさん@お腹いっぱい。
21/04/21 20:07:40.11 .net
>>300
歳のせいにするな。お前の能力の問題だ。

308:名無しさん@お腹いっぱい。
21/04/21 22:14:14.03 .net
噂のpwsh試してみたけど、とりあえずコマンドライン作業中の電卓代わりにはpythonよりはいいな
子シェルだからパス通ってて、普通に演算子と数学関数が下拵え無しで使えるってだけだけど
64KBと打つと65536を返してくるのは遊び心かな?
まあスレ違いだねごめん

309:名無しさん@お腹いっぱい。
21/04/21 22:37:37.09 .net
電卓代わりでbc/dc思い出して遊ぼうと思ったら今時のlinuxにはdcはいってないのね
頭の体操にいいのに残念

310:名無しさん@お腹いっぱい。
21/04/22 09:18:28.19 .net
普通パッケージぐらいは用意されていて入れれば入るんじゃない?
deb系なら apt-get install dc で使える

311:名無しさん@お腹いっぱい。
21/04/22 18:02:08.57 .net
LLのREPL使えばええやん

312:名無しさん@お腹いっぱい。
21/04/25 11:29:37.47 .net
for i in "予定1" "予定2" "予定3"
do
[ $i = "予定1" ] && echo "予定1"; sleep 3
[ $i = "予定2" ] && echo "予定2"; sleep 3
[ $i = "予定3" ] && echo "予定3"; sleep 3
done

313:名無しさん@お腹いっぱい。
21/05/01 09:40:38.84 .net
今日のIDすごいwww

314:名無しさん@お腹いっぱい。
21/05/02 22:37:50.92 .net
しらんがなー

315:名無しさん@お腹いっぱい。
21/05/03 22:39:37.02 .net
シェルスクリプトはperl にとって代わるCGIの記述言語って本当すか?

316:名無しさん@お腹いっぱい。
21/05/04 00:29:14.02 .net
>>309
そもそもCGIはすでに廃れてるって知ってる?

317:名無しさん@お腹いっぱい。
21/05/04 00:30:10.82 .net
今どき本格的なサーバー側アプリをCGIで作るなんてないわけで
まあ簡単なツールぐらいならやるかもしれんけどさ

318:名無しさん@お腹いっぱい。
21/05/04 01:58:13.24 .net
>>311
知らんのだがCGI以外でどう処理してるの?ジャバスクリプト?

319:名無しさん@お腹いっぱい。
21/05/04 07:10:50.01 .net
>>312
WebアプリケーションフレームワークがWebサーバ機能を持っていて、フロントエンドのWebサーバからリバースプロキシして使うのが多いかな。
だからWebサーバとアプリケーションの接続インターフェイスと言う感じじゃ無いんよ。

320:名無しさん@お腹いっぱい。
21/05/04 17:00:00.58 .net
えっ、そうなの?
perlじゃ無くCGIがオワコンで、マトモwebサービス作成にはもう使われ無いのね。

321:名無しさん@お腹いっぱい。
21/05/06 02:07:50.66 .net
perl自体がオワコンかどうかの話は別として歴史の話をすると
初期はウェブサーバー+perlスクリプト、つまりCGIでウェブシステムが作られていた
もう2000年とかその頃の話よ。とほほのなんとかとかKentなんとかとかが幅を利かせていた
当時のプロ(ホームページ制作会社)でもそういったCGIを使っていた時代
その後はPHPが登場したが、これはウェブサーバーにPHPをモジュールとして組み込む
mod_phpが利用されていた。アクセスのたびにperlスクリプトを呼び出さないから速い
同じようにmod_perlというのもあった。
この頃のプロといえば自社でサーバーを保守管理するウェブサービス会社だったかな
その後から現在はアプリ自身でウェブサーバーとして起動するようになった
RailsとかPythonとかはそれが主。もちろんphpでもperlでもこの仕組が使える
クラウドの時代のプロのシステムはほぼこれ。もちろん今もホームページ制作会社はあるけど
ウェブサービス作ってる会社ってもうこんな感じじゃないでしょ?
アプリにウェブサーバーが内蔵されてると言っても、それはアプリに最適化されていて
静的コンテンツを配信するのには適していないから
>>313のいうように前段に普通のウェブサーバー(nginxやapache)を配置して
アプリ用のURLだけリバースプロキシでWebフレームワークにわたす仕組み
シェルスクリプトは、ブラウザにモジュールとして組み込んだり
シェルスクリプト自身をウェブサーバーにすることはできないからCGIオンリーで使うしか無い
と思ったらmod_bashなんてあるのなw
まあアクセス数が少ない個人用のシステムとか、特定のサーバーからアクセスしない
死活監視用のエンドポイント程度になら使っても良いんじゃね?

322:名無しさん@お腹いっぱい。
21/05/06 11:37:17.18 .net
ネタかなんかなの?このくだり

323:名無しさん@お腹いっぱい。
21/05/07 04:02:34.96 .net
いや、マジレスだろ。

324:名無しさん@お腹いっぱい。
21/05/07 09:52:15.00 .net
時系列はおかしいけども、仕組みとしては大体合ってるし、いいんじゃない?

325:名無しさん@お腹いっぱい。
21/05/08 11:58:10.94 .net
間違ってると言うやつほど
どこが間違っているかを言わない

326:名無しさん@お腹いっぱい。
21/05/08 19:01:34.99 .net
しかしこれは CGI が使われなくなったと言われれば違和感はある Web サーバーがリバースプロキシに変化してアプリが Web サーバーを持ったに過ぎないのだろう
CGI とは Web サーバーから実行ファイルを走らせる技術だよね違うのかな

327:名無しさん@お腹いっぱい。
21/05/09 02:29:54.79 .net
>>320
アプリケーションにHTTPヘッダを環境変数で渡す方法などを定めたものがCGI、だからInterfaceなの。
この方法で渡していないならそれはCGIではない。

328:名無しさん@お腹いっぱい。
21/05/09 08:40:11.68 .net
もともとリバースプロキシの機能はウェブサーバーにあったのだから
どちらかと言えばウェブサーバーをリバースプロキシだけに使うように
使い方が変化してって言う方が適切だね
ちなみに開発時だとウェブサーバーはあまり使わない
ウェブサーバーとしての機能や性能は必要ないので
アプリ内臓の簡易ウェブサーバー機能で十分だから

329:名無しさん@お腹いっぱい。
21/05/09 08:52:57.10 .net
>>320
> CGI とは Web サーバーから実行ファイルを走らせる技術だよね違うのかな
一番の違いはアプリが常駐しているかどうか
CGIはアプリが常駐して無くてアクセスのたびにコマンドを実行する
このコマンドを実行するっていうのはかなり重い処理なのでパフォーマンスが出ない
特にシェルスクリプトなんか外部のコマンドを組み合わせて処理するものだから
1アクセスでシェルスクリプト本体の実行の他に
sedコマンド+grepコマンド+awkコマンド+jqコマンド・・・みたいになるから
Perlで作るよりも確実にパフォーマンスが悪くなる。Perlよりも悪い選択
それに対してCGIじゃない仕組みはサーバーマシン起動時に1回コマンドを起動するだけ
もし誰かに、これからのCGIはシェルスクリプト!シェルスクリプトでもこれだけの速度が出る!って
郵便番号から住所を検索するデモをみせてシェルスクリプトでシステム開発させようと洗脳する組織団体にそそのかされていたら
それアクセスが多い時にパフォーマンス出ますか?他の言語とベンチマークして比較していいですか?って聞いたら良いよ
郵便番号のデータなんてたかだか十数MBしかないしSSD使ってりゃ0.01秒未満で読み込めるのは当たり前
そんな低負荷なデモを数回見せた程度でパフォーマンスの検証なんてできやしない

330:名無しさん@お腹いっぱい。
21/05/09 11:14:52.20 .net
>>323
fastcgiってcgiと呼んじゃダメなん?

331:名無しさん@お腹いっぱい。
21/05/09 11:52:38.01 .net
>>324
FastCGIはCGIの環境変数や標準入出力の内容をカプセル化してsocketで通信するように定められているから無関係ではないんだけど、
環境変数とか標準入出力を使っているわけじゃないからやはりCGIでは無いと思うよ。

332:名無しさん@お腹いっぱい。
21/05/09 14:19:11.63 .net
そういやFastCGIなんて技術もあったな
あれも「プロセス起動が遅い」という問題を
プロセス終了をさせずにプロセスを使い回すことで
解決する技術なんだよな
シェルスクリプトでそれがやれるかっつーと無理だろうな
いやwikiによればURLリンク(ja.wikipedia.org)
名前付きパイプもサポートしてるようだからから不可能じゃないのか?
でもまあシェルスクリプトから呼び出すコマンドは
どちらにしろプロセス起動になるわけで
シェルスクリプトで全部実装するならまだしも
普通のシェルスクリプトではあまり効果がないだろうな

333:名無しさん@お腹いっぱい。
21/05/09 14:26:02.10 .net
英語だし読む気はないけどなんかそういう技術があるみたいだw
FastCGI shell script
URLリンク(stackoverflow.com)
ここの Look at "Writing agents in sh: conversing through a pipe"
まあ一般的にシェルスクリプトでFastCGIは無理(無意味)やでって書かれてるようだね

334:名無しさん@お腹いっぱい。
21/05/09 14:40:26.25 .net
んでさ>>309に聞きたいんだけど
> シェルスクリプトはperl にとって代わるCGIの記述言語って本当すか?
ってどういう流れで誰に聞いたの?
二十年ぐらい前にコンピューターにちょっと詳しいだけの高校生や大学生の
会話で出てきた話だってのならわかるけどさ
今のウェブ開発ではCGIという単語自体でてこない

335:名無しさん@お腹いっぱい。
21/05/14 08:14:28.21 .net
>>328
年寄りと話すと、API叩くことをCGI呼び出すと表現するよ

336:名無しさん@お腹いっぱい。
21/05/17 12:58:38.74 .net
アクセス数が少なければ今でもcgiで十分。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch