X



シェルスクリプト総合 その37
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
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/
0201デフォルトの名無しさん
垢版 |
2021/10/17(日) 23:53:53.96ID:DWmfIprR
>>200
混乱するよな、だったら、そうやな、で終わってた。

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

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

>>188
誤解のない文章を書けるようになれよ?
クソ文を読めない人間の悪口なんか言わんと。
0203デフォルトの名無しさん
垢版 |
2021/10/18(月) 00:47:48.71ID:JsauePnn
>>202
元々に合わせてのなんだけどな
基本的に元のレスに合わせる感じ、なんか断定的に書いてたりしたら、ひとりごちでわかったように書いてたらw
(true/falseってコマンドが真っ先にじゃね?wともあってなあ。シェルスクリプトでtrue/false書くのはコマンドのだし)
0204デフォルトの名無しさん
垢版 |
2021/10/18(月) 01:12:06.51ID:JsauePnn
>真っ先にじゃね?wともあってなあ
真っ先にじゃね?wともあってなあ、「わかるだろ」と親切心w皆無(何故かは書いた通りw)なこともあり
てことね
0205デフォルトの名無しさん
垢版 |
2021/10/18(月) 02:50:01.04ID:mrfOLNSK
おまいMbだろ
0207デフォルトの名無しさん
垢版 |
2021/10/18(月) 07:42:47.78ID:9KKYdoU5
>>206
ごめんなさい、fi です。
whileの説明も書き写していたけど長いと思って削除したんですが、その時のミスです。
0208デフォルトの名無しさん
垢版 |
2021/10/18(月) 08:55:39.51ID:9KKYdoU5
>>200
Ifに関しては普通のプログラムも真かそれ以外かだと思うけど。
0209デフォルトの名無しさん
垢版 |
2021/10/18(月) 08:57:21.08ID:9KKYdoU5
>>208
失礼、プログラムじゃなくてプログラミング言語
0212デフォルトの名無しさん
垢版 |
2021/10/18(月) 10:32:14.58ID:sM+wOftf
>>208
普通のプログラム言語は式が真かそれ以外と評価される
シェルスクリプトはコマンドの実行結果が真かそれ以外と評価される

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

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

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

という、怖ろしい連中がいることを肝に銘じてほしい。」
0218デフォルトの名無しさん
垢版 |
2021/10/24(日) 00:23:08.92ID:Ku/iA6Hb
好きにだな
シェルがやる(汎用)のかコマンドがやる(独自)のかの違い
得られるのは同じ
0223デフォルトの名無しさん
垢版 |
2021/11/07(日) 20:05:32.87ID:xhLNYeNd
shでmain関数を定義して
ループ内で main & すればサブプロセスで動いてくれてechoしたときの出力も全部表示されるやん?
powershellで同じことしたいのにできひんねんけど誰か教えてくれ
0228デフォルトの名無しさん
垢版 |
2021/11/15(月) 14:15:42.51ID:o0383L8J
すごく初心者はいきなりcshとかやらずに
コンピュータの仕組みを理解するのが先だと思う
0229デフォルトの名無しさん
垢版 |
2021/11/15(月) 14:28:42.54ID:2zWqj8FL
ありがとうございます。

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

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

会社のメンバーが
cshで実行するスクリプトを
多用していて理解したり
自分で書いたりする必要が
発生しました。
0236デフォルトの名無しさん
垢版 |
2021/11/16(火) 12:03:49.53ID:a9xlbndo
40代だけど、Solarisでtcshがログインシェルだったなあ
作業手順書作って、承認受けてから変更作業するタイプのしごとしてて、
ワンライナースクリプトをcshrcに書いてた記憶がある。
帰ったらその頃の資料探してみる
独立したshell scriptを書くには向かないのは同意
0237デフォルトの名無しさん
垢版 |
2021/11/16(火) 13:09:44.40ID:6naJ2IpF
Bsh系も、testコマンドのオプション扱いじゃなく、
直感的な == < > <= >= != を使いたいと思うことがある
普段他の言語を書いてて、たまにshを使おうとするといつも一瞬考えてしまう
Bashだと = のかわりに == が使えるけど、後は駄目だもんな
= もスペースのあるなしで代入と区別するなんてこと忘れてて悩むことしばし
0240デフォルトの名無しさん
垢版 |
2021/11/18(木) 00:52:48.55ID:8Z3t28Md
>>236
使ってた本は
技術評論社のThe UNIX Surper Text 上
で、
第29章 csh プログラミング
だと思う。
ほかはmanとwebの情報でやってたはず。

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

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


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

古いbshもこの方式が必要だったはず。
0243デフォルトの名無しさん
垢版 |
2021/11/18(木) 08:22:45.64ID:+R4B5ZiG
あれ?できるね?なにで引っかかったんだっけか?
改行文字だったかな?

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

どうも仕様がよくわからん
0244デフォルトの名無しさん
垢版 |
2021/11/18(木) 14:06:14.63ID:a7FUItee
昔に何故cshでshell scriptを書くべきでないかという英語文書があって日本語訳もあった
調べたい人は自分で調べてくれ
0247デフォルトの名無しさん
垢版 |
2021/11/19(金) 00:59:37.90ID:Z3I1Kt5f
cshの問題点

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

これか

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

難しいのか不可能なのかはっきりしてほしいな
不可能なんじゃないのか?
0248デフォルトの名無しさん
垢版 |
2021/11/19(金) 01:47:44.31ID:tkL53aTR
えー。うそー。そんなの簡単じゃん。

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

ひでぶっ
0250242
垢版 |
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
って感じで使ってた
0251デフォルトの名無しさん
垢版 |
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)
0255デフォルトの名無しさん
垢版 |
2021/11/20(土) 10:05:52.73ID:+pLKjIh3
例えて言うのなら、

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

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

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


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

Twitter側の帯域制限があるのだろうと思うけど
別に自慢できる量じゃないなぁ
そもそも通信速度とサーバーの負荷に依存する話なので
たかがクライアントアプリを自慢するようなもんじゃない
0258デフォルトの名無しさん
垢版 |
2021/11/23(火) 15:01:42.04ID:HIAOM8SH
全ての事をシェルスクリプトで実現可能だと信じる者にとっては、この世の全てはシェルスクリプトの話になる。
0259デフォルトの名無しさん
垢版 |
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を実行する形になりますでしょうか。

お手数おかけして恐縮ですが、教えていただければ幸いです。
0261デフォルトの名無しさん
垢版 |
2021/11/25(木) 01:32:33.90ID:nh0ZEMSE
コマンド呼び出しは、 `〜`, $(〜)

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

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

cp -f dir1/file dir2 を実行し、もし失敗したとき、
echo File copy failure >> log
を実行させる処理はどのようにすればよいですか?
0270デフォルトの名無しさん
垢版 |
2021/12/08(水) 21:26:49.78ID:FensyVy4
シェルスクリプト if文
でググると最初の方にあるのは、[ ] (test) ありきで、
評価するのは 条件式 と他の言語と同じような説明してるのなんだな
0271デフォルトの名無しさん
垢版 |
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を渡せたらな、
というのを期待しています
0272デフォルトの名無しさん
垢版 |
2021/12/09(木) 11:16:25.28
補足 >>271
実際はsample1.shの部分はサードパーティな他のスクリプトで
そのプロセスが走ってる感じです
具体的にはbash sample1.shの部分は
npm localtunnel --port 8010
です。
これが途中で your url is https://○○
みたいな表示が出てくるのですが
そのhttps://○○をsample2.shで受け取りたいのです。
0274デフォルトの名無しさん
垢版 |
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 $?.
0275デフォルトの名無しさん
垢版 |
2021/12/09(木) 11:59:18.64ID:4q0mFQ+L
>>271
プロセスの標準出力・エラーを、tee とかでファイルへリダイレクトして、
そのファイルを、tail とかで読み込めば?

単純に、パイプでつないでも出来るかな?
分からないけど
0278デフォルトの名無しさん
垢版 |
2021/12/09(木) 22:10:34.91ID:ghcaSzTo
>>271 mkfifoで名前付きパイプを使ってもいいと思った
取りこぼしが無いよう、先にパイプを作る必要はあるが
mkfifo pipe
sample2.sh < pipe &
sample.sh > pipe &
fg %-
みたいな
0279デフォルトの名無しさん
垢版 |
2021/12/09(木) 22:21:13.87ID:2QHtVdpK
sample2の引数にsample1を取って中で実行させるんじゃ駄目なの?
0281デフォルトの名無しさん
垢版 |
2021/12/10(金) 01:52:13.39ID:Uh57IFJZ
>>274
無駄な書き方だからでは?
警告通りに if mycmd ... の形式を使うわけには行かないのか?
0283デフォルトの名無しさん
垢版 |
2021/12/11(土) 14:27:15.50ID:uPYAT6Ja
>>274
普通はファイルが存在するならコマンドを実行する、と書くし、非存在時のechoコマンドの
出力先が標準出力な点も気になる(標準エラー出力であるべき)。また、catコマンド実行時に
ファイルが見つからなければ、"そのようなファイルやディレクトリはありません"とコマンド
自体が(標準エラー出力に)メッセージを出すので、重複した記述でもある。
0284デフォルトの名無しさん
垢版 |
2021/12/11(土) 18:07:38.11ID:vrksYrpn
> 普通はファイルが存在するならコマンドを実行する、と書くし、

書かねーよ。
ファイルが存在すると判断した後の消されたどうすんだ
シェルスクリプト業界って素人が多いのか?
0285デフォルトの名無しさん
垢版 |
2021/12/11(土) 18:07:53.48ID:vrksYrpn
ファイルが存在すると判断した後に消されたどうすんだ
0287デフォルトの名無しさん
垢版 |
2021/12/11(土) 18:15:19.56ID:vrksYrpn
シェルスクリプト業界だろ?w
シェルスクリプトばーっかりやってる
シェルスクリプト最強って言ってるアホ会社ども
0289デフォルトの名無しさん
垢版 |
2021/12/11(土) 19:21:54.38ID:Vruq/eED
どうせエラー出て失敗するんだからやり直せばいいだけのことなのに
あらゆる可能性を想定して滅多に使われない機能まで組み込んで肥大化する方があるある
0290デフォルトの名無しさん
垢版 |
2021/12/11(土) 19:36:54.86ID:EpvuxOsQ
問題点に対するソリューションのご提案。
・ファイルロックを取得してから操作します。
・ファイルロックを取得できなかった場合、
 1.他のプロセスが既に取得している。
 2.ファイルが存在しない。
・以上を確認します。
0291デフォルトの名無しさん
垢版 |
2021/12/11(土) 20:08:06.21ID:vrksYrpn
>>288

> 普通はファイルが存在するならコマンドを実行する、と書くし、

これがだめなやり方だって話をシてるんだが理解してる?
0293デフォルトの名無しさん
垢版 |
2021/12/11(土) 22:38:36.00ID:qYkp+8zL
テキストの入力、加工、出力以外の処理を無理に書くべきじゃない
それ以上のことがやりたくなったら別の言語使った方が楽
0294デフォルトの名無しさん
垢版 |
2021/12/11(土) 22:39:56.90ID:vrksYrpn
シェルスクリプトでcpやrmを実行するなとか言ってんの?
アホじゃね?
お前シェルスクリプトの使い方を間違ってるよ
むしろテキストの加工ならなんの言語でやってもいい
0295デフォルトの名無しさん
垢版 |
2021/12/11(土) 23:30:45.47ID:dNHI9UuU
どこの会社でもやたら批判的な発言をするものの具体的な答えは何も示さず
相手が何を言い返しても分かった風の立場で「それは違う」と上から目線で言い続けるだけのマシーンっているよね
一言目から答え出しておけば無駄な会話もなくなるのに
0296デフォルトの名無しさん
垢版 |
2021/12/11(土) 23:47:58.53ID:6uvwt7oX
変な会社に勤めてるんだな
自分の特殊な環境なのに全体にするとか
ネットによく居るタイプだな
0300デフォルトの名無しさん
垢版 |
2021/12/12(日) 12:20:58.07ID:JyN9iiR1
ファイルをロックしてまで、やっているスクリプトは珍しい

普通は、ファイルが存在しなければ、そこでエラーになるだけ
■ このスレッドは過去ログ倉庫に格納されています

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