シェルスクリプト総合 その37

■ このスレッドは過去ログ倉庫に格納されています
2021/10/05(火) 22:49:30.91ID:KsbWuyFp
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
・「POSIX原理主義」「ユニケージ」「USP研究所」はPOSIXとUnixを曲解し
間違ったシェルスクリプトを広めている宗教です。洗脳されないようにしてください。

前スレ: シェルスクリプト総合 その36
https://mevius.5ch.net/test/read.cgi/tech/1614212414/

関連スレ
・【Bash】Windows Subsystem for Linux【WSL】11
https://mao.5ch.net/test/read.cgi/linux/1627507889/
・Bashでプログラミング [転載禁止](c)2ch.net
https://mao.5ch.net/test/read.cgi/linux/1443885102/
・シェルスクリプト総合 その28
https://mevius.5ch.net/test/read.cgi/unix/1533154936/
・zsh その7
https://mevius.5ch.net/test/read.cgi/unix/1337844883/
・過去UNIXで使われていた ksh というシェルについて
https://mevius.5ch.net/test/read.cgi/unix/1582358403/
・【POSIX】UNIXプログラミング【BSD】 [転載禁止](c)2ch.net
https://mevius.5ch.net/test/read.cgi/unix/1443103705/
・おまえら! shell は何を使っているんですか?
https://mevius.5ch.net/test/read.cgi/unix/1012330865/
2021/10/17(日) 13:22:52.78ID:4nH2b59z
>>178
testコマンドの部分は
引数で渡された式が真ならtestコマンドは0を返す(以下略
と書いてあるだけじゃん
真というのはtestコマンドのテスト式内の話
180デフォルトの名無しさん
垢版 |
2021/10/17(日) 14:36:53.55ID:7C23oe5i
>>171
>trueは0、falseは1は正しい
>0はtrue、1はfalseは正しくない

ここだけ読むとイミフ
181デフォルトの名無しさん
垢版 |
2021/10/17(日) 14:38:28.76ID:7C23oe5i
>>171
>>177
どちらも可笑しい
仕様書に描いてあることが正しいのであって
おまえの意見はどうでもいい
2021/10/17(日) 14:50:31.56ID:VtgDJrjp
>>177
ture/false コマンドに(Exit Status) 0 および1を返すと書いてある
testコマンドに評価としてtrueとは書いてあるが、それは評価としてでその値が1なのか0なのかというのではないという理解だけど
POSIXに書いてあるという話なら
2021/10/17(日) 15:28:23.08ID:N+Nl+RmC
ぱっと流れを見てきただけだが、
[]/test コマンドの評価が真で0を返すってところからはじまって、
他のコマンドの返り値もこれにならって処理成功で0を返すようになったというだけじゃないの?
これをもって終了ステータス0が真を意味するってわけじゃないよねぇ

日本語と英語で、否定文に対する同意にyes/noが反対になるのと似てると思う
前者は否定文それ自体、後者は事象全体について、それぞれ評価してるよね
2021/10/17(日) 15:57:56.52ID:VtgDJrjp
>>177
trueコマンドのExit Statusは0、falseコマンドのExit Statusは1
評価した結果trueならExit Statusは0、falseならExit Statusは1
てことででの、trueは0、falseは1 (のExit Status) になるでしょ??

testコマンド(など)で書いてるtrueは一般的な文上でのtrue(例えばtest条件に一致する=真)と読んでるけどなあ

って、よく読んだら同じこと言ってるのか。シェル内部(?)の部分の話かそれ>>177
Exit Status が 0だったらtrue、1だったらfalse と評価されることは正しいが
(ここはわかる)
trueは0、falseは1(の値をあらわすこと)は正しくない
(言いたいことはなんとなくわかるしだったら否定はしないが、うーむ)

>>171は、
>終了ステータスは、
から始まってるとおり(上にも書いたけど)、
trueは0、falseは1は正しいが (そういうExit Statusになる)
だからといって、
シェルスクリプト上で 0はtrue、1はfalse(と見なすのは)正しくない
てこと。下は「trueは0、falseは1(の値をあらわすこと)は正しくない」と同じ意味だわな
2021/10/17(日) 16:08:04.69ID:VtgDJrjp
>>183
>[]/test コマンドの評価が真で0を返すってところからはじまって、
>他のコマンドの返り値もこれにならって処理成功で0を返すようになったというだけじゃないの?
Unixで動くプログラムはExit Statusが問題なければ 0、問題あればそれ以外というとこからはじまってかな。testコマンドもそれに合わせてのような
Unixを作る上でのOSのUnixとしてのExit Statusとはどういうものかというのは最も先に考えるだろうから、そこからはじまってかな
2021/10/17(日) 16:26:50.30ID:gRTtAvmG
いまでも 0〜255 なんですか
256 以上とか
0 未満とか
ありえないんですか?
2021/10/17(日) 16:36:48.76ID:VtgDJrjp
8ビットいっぱいでの値(=unsigned char)となってるね、POSIXでは
int main( ... ) だから、失敗なんぞで -1 をreturn できる(エラーにはならない)が、255になったりするねえ
2021/10/17(日) 16:50:37.61ID:8eKBj5MQ
ん?まさか、trueコマンドとfalseコマンドを
真偽値のtrue/falseのことだって勘違いしてる?
いやそんなアホはいないよねw

終了ステータスは数値であって
true/falseじゃないよ
はっきりした
2021/10/17(日) 16:59:10.58ID:VtgDJrjp
ただの独りよがり、マウントだけは取りたがり
まあわかったようなのでいいけど
2021/10/17(日) 17:35:18.24ID:8eKBj5MQ
>>183
終了ステータスは昔から0が正常終了、それ以外が異常終了という意味
シェルスクリプトのifは正常終了の場合にthenの中身を実行する

それだけの話なのに真とか偽とか、trueとかfalseとか
言ってるやつがいるだけ

trueコマンドは正常終了を返す
fasleコマンドは異常終了を返す
ifは正常終了か異常終了かで処理を分岐させるもので
真か偽かで処理を分岐させるものではない
2021/10/17(日) 17:37:48.32ID:VtgDJrjp
なにか必死感
>>175なんて平気で偉そうに自分で調べる探すことはできないくせに
まあこれ以上イジルのは止めようw
2021/10/17(日) 17:41:45.55ID:8eKBj5MQ
反論がないなら黙っとれ
2021/10/17(日) 17:48:01.87ID:VtgDJrjp
誰とは言わんがw某君は自分で調べることも探すこともできないは明らかだが、
そこからくる無知がコンプレックスからなんだろうなその常時上から目線すぐに誤魔化す癖なのは
と思われるw
194デフォルトの名無しさん
垢版 |
2021/10/17(日) 19:16:51.89ID:evqBS6BP
>>190
例えばカーニハン、ロブパイク共著のTHE UNIX PROGRAMMING ENVIRONMENT のp140のif構文の説明には
if command
then
commands if condition true
else
command if condition false
do
と書かれている。P145のwhile untilの説明にもtrueとfalseが使われている。
あなたの言いたい事は分かる、というかみんなわかってる。ただ、昔からの習慣をぶった切って何が得なのか分からない。
2021/10/17(日) 19:34:34.14ID:8eKBj5MQ
「条件が真」というのは真偽値とは別の話だよ
条件とセットになってないといけない

何が真かどうかは条件文つまりコマンドによって変わる
値だけをみて真かどうかなんてわからない
2021/10/17(日) 19:37:39.52ID:8eKBj5MQ
例えばexprという条件文は、1(0以外)が真で、0が偽
testという条件文は、文字列の長さがあれば真で、空文字なら偽
だからtestの場合は0も1も真だし、testの演算子を使えば、それに応じて結果も変わる
どの値が真か偽かなんてわからない
少なくともexprでは0は偽
197デフォルトの名無しさん
垢版 |
2021/10/17(日) 21:21:40.04ID:evqBS6BP
>>195-196
つまりスクリプトの文脈や使うコマンドに依存するって事ですよね。それは誰でも知っている。
全てに共通では無いからと言ってif文の話の時ですらtrue falseと言う言い方、表現を認めないと言うのはそれこそ文脈無視。何でそこまでtrue falseを否定するの?
2021/10/17(日) 22:06:34.19ID:wfDs6PxW
>>190で完全におわってるんだけど何が不満なんだよw
2021/10/17(日) 22:32:05.95ID:8eKBj5MQ
>>197
お前がレスしてくるから、返してるだけやで
何が不満なんだよ?
俺も聞きたいわw
2021/10/17(日) 22:53:52.24ID:RKnKEp2y
>ifは正常終了か異常終了かで処理を分岐させるもので
>真か偽かで処理を分岐させるものではない

そこが普通のプログラミング言語と違うから
混乱することあるよねって話だったんじゃ?
2021/10/17(日) 23:53:53.96ID:DWmfIprR
>>200
混乱するよな、だったら、そうやな、で終わってた。

ところが、混乱した頭でムリヤリ合理化して、シェルスクリプトとC言語に真偽を融合した大統一理論wを主張されたら、そりゃあ黙ってはおれん。

いや、スルーしてもええんやけど、イジったらおもろいやん?
2021/10/17(日) 23:59:20.58ID:DWmfIprR
>>184
コマンドの話やったらちゃんと「trueコマンド」って書かんと。
真偽値の話もあるところに単独で「true」とあったら、かならずしもコマンドのことやとは思わんやろ。。。

>>188
誤解のない文章を書けるようになれよ?
クソ文を読めない人間の悪口なんか言わんと。
2021/10/18(月) 00:47:48.71ID:JsauePnn
>>202
元々に合わせてのなんだけどな
基本的に元のレスに合わせる感じ、なんか断定的に書いてたりしたら、ひとりごちでわかったように書いてたらw
(true/falseってコマンドが真っ先にじゃね?wともあってなあ。シェルスクリプトでtrue/false書くのはコマンドのだし)
2021/10/18(月) 01:12:06.51ID:JsauePnn
>真っ先にじゃね?wともあってなあ
真っ先にじゃね?wともあってなあ、「わかるだろ」と親切心w皆無(何故かは書いた通りw)なこともあり
てことね
205デフォルトの名無しさん
垢版 |
2021/10/18(月) 02:50:01.04ID:mrfOLNSK
おまいMbだろ
2021/10/18(月) 05:37:03.73ID:0o1cEYf8
>>194
ホントにdoって書いてあるの?
207デフォルトの名無しさん
垢版 |
2021/10/18(月) 07:42:47.78ID:9KKYdoU5
>>206
ごめんなさい、fi です。
whileの説明も書き写していたけど長いと思って削除したんですが、その時のミスです。
208デフォルトの名無しさん
垢版 |
2021/10/18(月) 08:55:39.51ID:9KKYdoU5
>>200
Ifに関しては普通のプログラムも真かそれ以外かだと思うけど。
209デフォルトの名無しさん
垢版 |
2021/10/18(月) 08:57:21.08ID:9KKYdoU5
>>208
失礼、プログラムじゃなくてプログラミング言語
2021/10/18(月) 09:19:48.79ID:7yYa42Qv
>>208
>真かそれ以外か
そこに疑問を持った方がいいぞ。真か偽かと書けない時点で
2021/10/18(月) 10:24:02.43ID:1Sg888+/
>>208
何が真/偽と評価されるかの話に、抽象化された一般論で割り込むな。
2021/10/18(月) 10:32:14.58ID:sM+wOftf
>>208
普通のプログラム言語は式が真かそれ以外と評価される
シェルスクリプトはコマンドの実行結果が真かそれ以外と評価される

例えば C言語で if (foo(0)) { ... } とあったとき、
0は真だと思うかね?偽だと思うかね?

それと同じことだよ
213デフォルトの名無しさん
垢版 |
2021/10/20(水) 04:35:22.97ID:tjBtBq8J
Mb
>プログラミング言語どころかコンピュータのことすら
理解していない奴が荒らしにきているわけだ。
初心者はもちろん歓迎するのだが、

邪魔する奴は全力でツブす

という、怖ろしい連中がいることを肝に銘じてほしい。」
2021/10/20(水) 10:02:20.45ID:BWdzBBaJ
すぐに特定されそうなレスをよく書ける
2021/10/20(水) 10:35:57.56ID:UVUG50tp
>>213
お前私怨が文から溢れすぎ
2021/10/23(土) 03:05:44.21ID:46fTSgYa
! [ -n 'これ?' ]
[ ! -n 'それともこれ?' ]
2021/10/23(土) 08:05:12.92ID:TpylJdXD
[ 自体がコマンドなので自ずからわかるでしょう
2021/10/24(日) 00:23:08.92ID:Ku/iA6Hb
好きにだな
シェルがやる(汎用)のかコマンドがやる(独自)のかの違い
得られるのは同じ
2021/10/24(日) 23:07:32.27ID:egBH1Q0S
[] の中に入ってるほうがすき
2021/10/26(火) 05:10:22.39ID:NvoOVavJ
論理反転できないコマンドは外に!書くしかないしな
2021/10/26(火) 09:33:58.13ID:Y5xWPagQ
>>220
論理反転できるコマンドなんかあるんか?

gitコマンドとかで
2021/10/26(火) 10:12:21.51ID:sjaXXoqx
>>221
test
[
grep
find
2021/11/07(日) 20:05:32.87ID:xhLNYeNd
shでmain関数を定義して
ループ内で main & すればサブプロセスで動いてくれてechoしたときの出力も全部表示されるやん?
powershellで同じことしたいのにできひんねんけど誰か教えてくれ
2021/11/08(月) 04:06:00.33ID:jye9PFXO
さすがにPowerShellのスレで聞きなよ
2021/11/08(月) 08:18:35.84ID:7h7MJ4sx
>>223
Win32コンソールAPIの制限じゃなかったかな
WindowsのAPIのスレで聞くといいと思う
2021/11/15(月) 11:58:25.47ID:SlSQecoN
cshの書籍って何がおすすめですか。
すごく初心者です。
2021/11/15(月) 12:01:56.43ID:P0qC0lwO
初心者は、cshなんか使わないほうが?
BashかPerlのほうが!
2021/11/15(月) 14:15:42.51ID:o0383L8J
すごく初心者はいきなりcshとかやらずに
コンピュータの仕組みを理解するのが先だと思う
2021/11/15(月) 14:28:42.54ID:2zWqj8FL
ありがとうございます。

linuxは業務で触っていて
基本的なコマンドは知っています。
苦手ではありますが。

ハード屋なのですが
c言語、matlab、vba辺りの
コードは書いていました。

会社のメンバーが
cshで実行するスクリプトを
多用していて理解したり
自分で書いたりする必要が
発生しました。
2021/11/15(月) 15:15:05.60ID:kskWe0RM
cshを常用してるって50代後半以上の人たち?
2021/11/15(月) 18:25:02.89ID:dRw5fmM/
cshでちゃんと動くスクリプトをかける気がしない
2021/11/15(月) 18:50:52.77ID:P0qC0lwO
>>229
メンバーに、Cshからの離脱を提案するべき!w
2021/11/15(月) 19:06:48.98ID:Nvu8rn94
>>232
まさにそれ

>>229
そいつのオナニーをやめさせるべき
2021/11/15(月) 21:09:52.69ID:VIw7Bjxz
cshスクリプトの中からbashを呼び出せば問題解決だよ!
2021/11/16(火) 02:22:46.34ID:/Wn82zXu
>>230
まさに20代の時にcsh多用してた

今じゃ csh ってまだあったの?という感じだが
2021/11/16(火) 12:03:49.53ID:a9xlbndo
40代だけど、Solarisでtcshがログインシェルだったなあ
作業手順書作って、承認受けてから変更作業するタイプのしごとしてて、
ワンライナースクリプトをcshrcに書いてた記憶がある。
帰ったらその頃の資料探してみる
独立したshell scriptを書くには向かないのは同意
2021/11/16(火) 13:09:44.40ID:6naJ2IpF
Bsh系も、testコマンドのオプション扱いじゃなく、
直感的な == < > <= >= != を使いたいと思うことがある
普段他の言語を書いてて、たまにshを使おうとするといつも一瞬考えてしまう
Bashだと = のかわりに == が使えるけど、後は駄目だもんな
= もスペースのあるなしで代入と区別するなんてこと忘れてて悩むことしばし
2021/11/16(火) 19:38:58.36ID:ILiueDpc
>>277
コマンドを使わずにシェルの文法を使えばいいだけ

if ((0<10)); then
echo ok
fi
2021/11/16(火) 19:46:23.56ID:M5sJu72u
https://pubs.opengroup.org/onlinepubs/009604499/utilities/xcu_chap02.html#tag_02_06_04
Arithmetic expansion
2021/11/18(木) 00:52:48.55ID:8Z3t28Md
>>236
使ってた本は
技術評論社のThe UNIX Surper Text 上
で、
第29章 csh プログラミング
だと思う。
ほかはmanとwebの情報でやってたはず。

csh系はたとえシングルクォートの中でも!はエスケープしないといけないのが注意点かな。
変数の中に入れるときにエスケープはいつでも必須で、
それを使うときにヒストリ置換するならそのままつかい、ヒストリ置換せずに使うなら再度エスケープがいる。

あとは慣れだと思う。
リダイレクト関連はcshだと実現できないことがあったはずで、
それはcshからperl呼んで実質perlスクリプトになってたはず。
2021/11/18(木) 02:41:57.64ID:+R4B5ZiG
>>240
それで思い出したけどcshでシングルクォートだかダブルクォートだか
変数に入れることって出来る?
前に挑戦して挫折したことがあるんだが
2021/11/18(木) 07:27:37.37ID:8Z3t28Md
>>241
シングルクォートを入れたければ、ダブルクォートでくくる。
ダブルクォートを入れたければシングルクォートでくくる。


set hensu="single ' double "'"'" hogehoge"

古いbshもこの方式が必要だったはず。
2021/11/18(木) 08:22:45.64ID:+R4B5ZiG
あれ?できるね?なにで引っかかったんだっけか?
改行文字だったかな?

入れること自体はできるけど、それを使おうとすると
Unmatchedが表示されない?
改行+クォートの場合だけ?

どうも仕様がよくわからん
2021/11/18(木) 14:06:14.63ID:a7FUItee
昔に何故cshでshell scriptを書くべきでないかという英語文書があって日本語訳もあった
調べたい人は自分で調べてくれ
2021/11/19(金) 00:14:07.06ID:tkL53aTR
>>230
そう。正に俺の歳が分かれ目だ。
2021/11/19(金) 00:38:23.55ID:ufFlBqDY
>>244
>>2に書いてるんじゃね
2021/11/19(金) 00:59:37.90ID:Z3I1Kt5f
cshの問題点

> 4. クオート
> csh ではまともにクオートをすることができません。

これか

> 改行をクオートするためにはバックスラッシュを使う必要があり、文字列に含
> めるのは本当に難しいことです。

難しいのか不可能なのかはっきりしてほしいな
不可能なんじゃないのか?
2021/11/19(金) 01:47:44.31ID:tkL53aTR
えー。うそー。そんなの簡単じゃん。

% set s = "abc\
def"
% echo "$s"
Unmatched ".

ひでぶっ
2021/11/19(金) 01:55:47.56ID:mVkI0tbJ
>>248
どうなっとるんや?w
250242
垢版 |
2021/11/19(金) 08:41:17.13ID:STy6DLgM
LFが入った変数を再度シェルに評価させるときは、
もともとその変数の末尾に¥¥を書く。
気をつけるのはヒストリ置換だけじゃなかったね
忘れてたよ。

alias time-filter '(perl -e '"'"'\\
use POSIX qq(strftime); \\
$| = 1; \\
while (defined(my $line = <>)) { \\
print strftime("%Y/%m/%d %H:%M:%S ", localtime), $line; }'"')"

こんな感じ。
csh手元にないから動作確認してみて。
tail -f 時刻が出ない追記されていくファイル | time-filter
って感じで使ってた
2021/11/19(金) 21:58:57.06ID:QjMBy/iN
例の大学で教授やってるやつ、どうどう利用規約違反してたことを
宣言しててこいつやばくね?わかってないのかね?

リッチー大佐の中の人

https://twitter.com/col_richie/status/1460830111939186689

> Twitter API v2は、収集可能なツイート数の制限が無料プランでも月200万ツイートに緩和される、
> とアナウンスされたのだが、我らのTwitterアプリ「小鳥男」なら、とっくの昔から、
> 理論上432万ツイートを1日で(1秒あたり50)収集する能力を持っているぞ。
https://twitter.com/5chan_nel (5ch newer account)
2021/11/19(金) 23:56:45.76ID:mVkI0tbJ
「理論上」の「能力」の何が「規約違反」なんや?w
2021/11/20(土) 00:56:30.88ID:JrFFOVaX
本人降臨
2021/11/20(土) 07:12:22.11ID:H2B0KunX
本人に直接言えよ、誰も興味ないっての
2021/11/20(土) 10:05:52.73ID:+pLKjIh3
例えて言うのなら、

1ヶ月30GBまで使えるように緩和されます

とっくの昔から理論上一日で30GB使い切るアプリを持っているぞ!

何を自慢しているのかわからないなw
そんなのどんなアプリだって使い切る能力ぐらい持ってるでしょ


432万ツイートを収集できる能力のどこが「とっくの昔から能力を持ってるぞ」と
自慢するようなないようなのかわからん
2021/11/20(土) 10:12:48.03ID:+pLKjIh3
むしろ1秒あたり50ツイートって遅くね?
1ツイートあたり 280文字?として多めに見積もって1ツイート1KB
つまり50KB/sでしょ?

Twitter側の帯域制限があるのだろうと思うけど
別に自慢できる量じゃないなぁ
そもそも通信速度とサーバーの負荷に依存する話なので
たかがクライアントアプリを自慢するようなもんじゃない
2021/11/20(土) 12:55:55.53ID:mzO+cRkE
それってシェルスクリプトの話なの?
258デフォルトの名無しさん
垢版 |
2021/11/23(火) 15:01:42.04ID:HIAOM8SH
全ての事をシェルスクリプトで実現可能だと信じる者にとっては、この世の全てはシェルスクリプトの話になる。
259デフォルトの名無しさん
垢版 |
2021/11/24(水) 16:26:22.49ID:uH6oNI9g
すみません、質問です。

hoge(関数) /usr/bin/python /usr/local/bin/piyo/piyopiyo.py

mv foge fogefoge
rm *hege*.csv
exit

hoge()[
python -B $1
以下、処理
]

という形は、
hoge(関数)というサブルーチン内で/usr/local/bin/piyo/piyopiyo.pyを実行する形になりますでしょうか。

お手数おかけして恐縮ですが、教えていただければ幸いです。
2021/11/24(水) 20:18:23.05ID:BxfR7tjM
>>259
ならない
だから安心しろ
2021/11/25(木) 01:32:33.90ID:nh0ZEMSE
コマンド呼び出しは、 `〜`, $(〜)

〜の所に、/usr/bin/python /usr/local/bin/piyo/piyopiyo.py
を書けばよい

python で、スクリプトファイルを実行する
2021/12/06(月) 13:07:43.50ID:EdXlAvnn
リッチー大佐ヤケドしすぎててワロタw
あの2人、終始レッテル貼りと揚げ足取りばっかりで終わってるな
2021/12/07(火) 00:28:49.96ID:8z/NS8OJ
おわってんのはおめーだよ...
264デフォルトの名無しさん
垢版 |
2021/12/07(火) 08:02:22.59ID:J63EZfFq
お?本人登場ですかな?www
2021/12/07(火) 11:51:58.44ID:sVKUttQ/
ガチでヌーブなんですけどrequestsとbeautifulsoupでスクレイピングやってます
waitかけないとバンされるよと言われましたがどうすればいいですか?
requests.get()でtimeoutは今書きましたがforで同じサイトの似たようなページに何度もアクセスするのでサーバーへの負荷はすごいと思います
これに対してどうすればいいですか?
2021/12/07(火) 12:54:21.46ID:lMfMxSoR
シェルスクリプトの話題ではないので、他のスレへ書き込んでください!
267デフォルトの名無しさん
垢版 |
2021/12/08(水) 18:51:18.84ID:pKMBsr2n
すみません、質問です。

cp -f dir1/file dir2 を実行し、もし失敗したとき、
echo File copy failure >> log
を実行させる処理はどのようにすればよいですか?
2021/12/08(水) 18:53:04.75ID:FensyVy4
if文調べてみ
2021/12/08(水) 19:23:10.00ID:1IkqCtnf
宿題は自分でやらなきゃ
2021/12/08(水) 21:26:49.78ID:FensyVy4
シェルスクリプト if文
でググると最初の方にあるのは、[ ] (test) ありきで、
評価するのは 条件式 と他の言語と同じような説明してるのなんだな
2021/12/09(木) 11:10:12.63
一定時間ごとにechoするスクリプトがあります
プロセスっていうのでしょうか、
そのechoされたものを動的に取得し
別のスクリプトに渡したいのですがどうやればいいのでしょうか

【sample1.sh】
echo aaa
sleep 3
echo bbb

【sample2.sh】
echo $1

$ bash sample1.sh & sleep 5 && bash sample2.sh

このコードになんらかを加えてsample2にbbbを渡せたらな、
というのを期待しています
2021/12/09(木) 11:16:25.28
補足 >>271
実際はsample1.shの部分はサードパーティな他のスクリプトで
そのプロセスが走ってる感じです
具体的にはbash sample1.shの部分は
npm localtunnel --port 8010
です。
これが途中で your url is https://○○
みたいな表示が出てくるのですが
そのhttps://○○をsample2.shで受け取りたいのです。
2021/12/09(木) 11:17:25.98
訂正 >>272 npmじゃなく
npx localtunnel --port 8010
でした。
2021/12/09(木) 11:52:59.62ID:4q0mFQ+L
# コマンドの実行履歴を出力する
set -x

# コマンドの返り値が非ゼロのとき停止する
set -e

コマンド終了時には「終了ステータス (exit-status)」と呼ばれる、
コマンドの成否を表す数値が、特殊変数 $? に自動で設定される

各コマンドにより異なるが、一般的には、
コマンド成功時には「0」
失敗時には「1」(コマンドやエラーの種類によっては、0 以外)

何かのコマンド
echo $?

例えば、
#!/bin/sh

cat abc

case $? in
0) echo "ファイルが存在する" ;;
*) echo "ファイルが存在しない" ;;
esac

これを、if [ $? = 0 ]; then
と書くと、Shell Check の警告が出る

SC2181: Check exit code directly with e.g. 'if mycmd;', not indirectly with $?.
2021/12/09(木) 11:59:18.64ID:4q0mFQ+L
>>271
プロセスの標準出力・エラーを、tee とかでファイルへリダイレクトして、
そのファイルを、tail とかで読み込めば?

単純に、パイプでつないでも出来るかな?
分からないけど
2021/12/09(木) 12:30:42.74
>>275
おおそんな便利なコマンドがあったんですね
$bash sample1.sh | tee result.txt & sleep 5 && bash sample2.sh
でsample2内で取得できましたありがとうございます

ゴテゴテですが一応やりたかったことはできました
https://colab.research.google.com/drive/1nHbgd_KRiSF3uoaRKsM8shhMqFrI6PB0
2021/12/09(木) 21:58:36.81ID:Mbxb9x/j
for ((i=0; i < 10; i++)) {
...
}

i=-1; while : $((i+=1)); [ $i -lt 10 ]; do
...
done
2021/12/09(木) 22:10:34.91ID:ghcaSzTo
>>271 mkfifoで名前付きパイプを使ってもいいと思った
取りこぼしが無いよう、先にパイプを作る必要はあるが
mkfifo pipe
sample2.sh < pipe &
sample.sh > pipe &
fg %-
みたいな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況