シェルスクリプト総合 その37
■ このスレッドは過去ログ倉庫に格納されています
シェルスクリプトに関する総合スレッドです。 全般 ・荒しは無視しましょう。 ・丁寧な姿勢を心掛けましょう。 ・ネチケット(死語)を意識しましょう。 ・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。 ・「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/ >>200 混乱するよな、だったら、そうやな、で終わってた。 ところが、混乱した頭でムリヤリ合理化して、シェルスクリプトとC言語に真偽を融合した大統一理論wを主張されたら、そりゃあ黙ってはおれん。 いや、スルーしてもええんやけど、イジったらおもろいやん? >>184 コマンドの話やったらちゃんと「trueコマンド」って書かんと。 真偽値の話もあるところに単独で「true」とあったら、かならずしもコマンドのことやとは思わんやろ。。。 >>188 誤解のない文章を書けるようになれよ? クソ文を読めない人間の悪口なんか言わんと。 >>202 元々に合わせてのなんだけどな 基本的に元のレスに合わせる感じ、なんか断定的に書いてたりしたら、ひとりごちでわかったように書いてたらw (true/falseってコマンドが真っ先にじゃね?wともあってなあ。シェルスクリプトでtrue/false書くのはコマンドのだし) >真っ先にじゃね?wともあってなあ 真っ先にじゃね?wともあってなあ、「わかるだろ」と親切心w皆無(何故かは書いた通りw)なこともあり てことね >>206 ごめんなさい、fi です。 whileの説明も書き写していたけど長いと思って削除したんですが、その時のミスです。 >>200 Ifに関しては普通のプログラムも真かそれ以外かだと思うけど。 >>208 失礼、プログラムじゃなくてプログラミング言語 >>208 >真かそれ以外か そこに疑問を持った方がいいぞ。真か偽かと書けない時点で >>208 何が真/偽と評価されるかの話に、抽象化された一般論で割り込むな。 >>208 普通のプログラム言語は式が真かそれ以外と評価される シェルスクリプトはコマンドの実行結果が真かそれ以外と評価される 例えば C言語で if (foo(0)) { ... } とあったとき、 0は真だと思うかね?偽だと思うかね? それと同じことだよ Mb >プログラミング言語どころかコンピュータのことすら 理解していない奴が荒らしにきているわけだ。 初心者はもちろん歓迎するのだが、 邪魔する奴は全力でツブす という、怖ろしい連中がいることを肝に銘じてほしい。」 ! [ -n 'これ?' ] [ ! -n 'それともこれ?' ] 好きにだな シェルがやる(汎用)のかコマンドがやる(独自)のかの違い 得られるのは同じ >>220 論理反転できるコマンドなんかあるんか? gitコマンドとかで shでmain関数を定義して ループ内で main & すればサブプロセスで動いてくれてechoしたときの出力も全部表示されるやん? powershellで同じことしたいのにできひんねんけど誰か教えてくれ >>223 Win32コンソールAPIの制限じゃなかったかな WindowsのAPIのスレで聞くといいと思う cshの書籍って何がおすすめですか。 すごく初心者です。 初心者は、cshなんか使わないほうが? BashかPerlのほうが! すごく初心者はいきなりcshとかやらずに コンピュータの仕組みを理解するのが先だと思う ありがとうございます。 linuxは業務で触っていて 基本的なコマンドは知っています。 苦手ではありますが。 ハード屋なのですが c言語、matlab、vba辺りの コードは書いていました。 会社のメンバーが cshで実行するスクリプトを 多用していて理解したり 自分で書いたりする必要が 発生しました。 >>229 メンバーに、Cshからの離脱を提案するべき!w >>232 まさにそれ >>229 そいつのオナニーをやめさせるべき cshスクリプトの中からbashを呼び出せば問題解決だよ! >>230 まさに20代の時にcsh多用してた 今じゃ csh ってまだあったの?という感じだが 40代だけど、Solarisでtcshがログインシェルだったなあ 作業手順書作って、承認受けてから変更作業するタイプのしごとしてて、 ワンライナースクリプトをcshrcに書いてた記憶がある。 帰ったらその頃の資料探してみる 独立したshell scriptを書くには向かないのは同意 Bsh系も、testコマンドのオプション扱いじゃなく、 直感的な == < > <= >= != を使いたいと思うことがある 普段他の言語を書いてて、たまにshを使おうとするといつも一瞬考えてしまう Bashだと = のかわりに == が使えるけど、後は駄目だもんな = もスペースのあるなしで代入と区別するなんてこと忘れてて悩むことしばし >>277 コマンドを使わずにシェルの文法を使えばいいだけ if ((0<10)); then echo ok fi >>236 使ってた本は 技術評論社のThe UNIX Surper Text 上 で、 第29章 csh プログラミング だと思う。 ほかはmanとwebの情報でやってたはず。 csh系はたとえシングルクォートの中でも!はエスケープしないといけないのが注意点かな。 変数の中に入れるときにエスケープはいつでも必須で、 それを使うときにヒストリ置換するならそのままつかい、ヒストリ置換せずに使うなら再度エスケープがいる。 あとは慣れだと思う。 リダイレクト関連はcshだと実現できないことがあったはずで、 それはcshからperl呼んで実質perlスクリプトになってたはず。 >>240 それで思い出したけどcshでシングルクォートだかダブルクォートだか 変数に入れることって出来る? 前に挑戦して挫折したことがあるんだが >>241 シングルクォートを入れたければ、ダブルクォートでくくる。 ダブルクォートを入れたければシングルクォートでくくる。 set hensu="single ' double "'"'" hogehoge" 古いbshもこの方式が必要だったはず。 あれ?できるね?なにで引っかかったんだっけか? 改行文字だったかな? 入れること自体はできるけど、それを使おうとすると Unmatchedが表示されない? 改行+クォートの場合だけ? どうも仕様がよくわからん 昔に何故cshでshell scriptを書くべきでないかという英語文書があって日本語訳もあった 調べたい人は自分で調べてくれ cshの問題点 > 4. クオート > csh ではまともにクオートをすることができません。 これか > 改行をクオートするためにはバックスラッシュを使う必要があり、文字列に含 > めるのは本当に難しいことです。 難しいのか不可能なのかはっきりしてほしいな 不可能なんじゃないのか? えー。うそー。そんなの簡単じゃん。 % set s = "abc\ def" % echo "$s" Unmatched ". ひでぶっ 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 って感じで使ってた 例の大学で教授やってるやつ、どうどう利用規約違反してたことを 宣言しててこいつやばくね?わかってないのかね? リッチー大佐の中の人 https://twitter.com/col_richie/status/1460830111939186689 > Twitter API v2は、収集可能なツイート数の制限が無料プランでも月200万ツイートに緩和される、 > とアナウンスされたのだが、我らのTwitterアプリ「小鳥男」なら、とっくの昔から、 > 理論上432万ツイートを1日で(1秒あたり50)収集する能力を持っているぞ。 https://twitter.com/5chan_nel (5ch newer account) 例えて言うのなら、 1ヶ月30GBまで使えるように緩和されます ↓ とっくの昔から理論上一日で30GB使い切るアプリを持っているぞ! 何を自慢しているのかわからないなw そんなのどんなアプリだって使い切る能力ぐらい持ってるでしょ 432万ツイートを収集できる能力のどこが「とっくの昔から能力を持ってるぞ」と 自慢するようなないようなのかわからん むしろ1秒あたり50ツイートって遅くね? 1ツイートあたり 280文字?として多めに見積もって1ツイート1KB つまり50KB/sでしょ? Twitter側の帯域制限があるのだろうと思うけど 別に自慢できる量じゃないなぁ そもそも通信速度とサーバーの負荷に依存する話なので たかがクライアントアプリを自慢するようなもんじゃない 全ての事をシェルスクリプトで実現可能だと信じる者にとっては、この世の全てはシェルスクリプトの話になる。 すみません、質問です。 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を実行する形になりますでしょうか。 お手数おかけして恐縮ですが、教えていただければ幸いです。 コマンド呼び出しは、 `〜`, $(〜) 〜の所に、/usr/bin/python /usr/local/bin/piyo/piyopiyo.py を書けばよい python で、スクリプトファイルを実行する リッチー大佐ヤケドしすぎててワロタw あの2人、終始レッテル貼りと揚げ足取りばっかりで終わってるな ガチでヌーブなんですけどrequestsとbeautifulsoupでスクレイピングやってます waitかけないとバンされるよと言われましたがどうすればいいですか? requests.get()でtimeoutは今書きましたがforで同じサイトの似たようなページに何度もアクセスするのでサーバーへの負荷はすごいと思います これに対してどうすればいいですか? シェルスクリプトの話題ではないので、他のスレへ書き込んでください! すみません、質問です。 cp -f dir1/file dir2 を実行し、もし失敗したとき、 echo File copy failure >> log を実行させる処理はどのようにすればよいですか? シェルスクリプト if文 でググると最初の方にあるのは、[ ] (test) ありきで、 評価するのは 条件式 と他の言語と同じような説明してるのなんだな 一定時間ごとにechoするスクリプトがあります プロセスっていうのでしょうか、 そのechoされたものを動的に取得し 別のスクリプトに渡したいのですがどうやればいいのでしょうか 【sample1.sh】 echo aaa sleep 3 echo bbb 【sample2.sh】 echo $1 $ bash sample1.sh & sleep 5 && bash sample2.sh このコードになんらかを加えてsample2にbbbを渡せたらな、 というのを期待しています 補足 >>271 実際はsample1.shの部分はサードパーティな他のスクリプトで そのプロセスが走ってる感じです 具体的にはbash sample1.shの部分は npm localtunnel --port 8010 です。 これが途中で your url is https:// ○○ みたいな表示が出てくるのですが そのhttps:// ○○をsample2.shで受け取りたいのです。 訂正 >>272 npmじゃなく npx localtunnel --port 8010 でした。 # コマンドの実行履歴を出力する 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 $?. >>271 プロセスの標準出力・エラーを、tee とかでファイルへリダイレクトして、 そのファイルを、tail とかで読み込めば? 単純に、パイプでつないでも出来るかな? 分からないけど >>275 おおそんな便利なコマンドがあったんですね $bash sample1.sh | tee result.txt & sleep 5 && bash sample2.sh でsample2内で取得できましたありがとうございます ゴテゴテですが一応やりたかったことはできました https://colab.research.google.com/drive/1nHbgd_KRiSF3uoaRKsM8shhMqFrI6PB0 for ((i=0; i < 10; i++)) { ... } 風 i=-1; while : $((i+=1)); [ $i -lt 10 ]; do ... done >>271 mkfifoで名前付きパイプを使ってもいいと思った 取りこぼしが無いよう、先にパイプを作る必要はあるが mkfifo pipe sample2.sh < pipe & sample.sh > pipe & fg %- みたいな sample2の引数にsample1を取って中で実行させるんじゃ駄目なの? >>279 終わった話に、あやしいやりかたの提案。w >>274 無駄な書き方だからでは? 警告通りに if mycmd ... の形式を使うわけには行かないのか? >>271 expect コマンドを使うと複雑な事も出来ると思う。 >>274 普通はファイルが存在するならコマンドを実行する、と書くし、非存在時のechoコマンドの 出力先が標準出力な点も気になる(標準エラー出力であるべき)。また、catコマンド実行時に ファイルが見つからなければ、"そのようなファイルやディレクトリはありません"とコマンド 自体が(標準エラー出力に)メッセージを出すので、重複した記述でもある。 > 普通はファイルが存在するならコマンドを実行する、と書くし、 書かねーよ。 ファイルが存在すると判断した後の消されたどうすんだ シェルスクリプト業界って素人が多いのか? ファイルが存在すると判断した後に消されたどうすんだ シェルスクリプト業界だろ?w シェルスクリプトばーっかりやってる シェルスクリプト最強って言ってるアホ会社ども >>284 どうせエラーになるから、問題ないやろ。 まあ、「業界」wではありがち。 どうせエラー出て失敗するんだからやり直せばいいだけのことなのに あらゆる可能性を想定して滅多に使われない機能まで組み込んで肥大化する方があるある 問題点に対するソリューションのご提案。 ・ファイルロックを取得してから操作します。 ・ファイルロックを取得できなかった場合、 1.他のプロセスが既に取得している。 2.ファイルが存在しない。 ・以上を確認します。 >>288 > 普通はファイルが存在するならコマンドを実行する、と書くし、 これがだめなやり方だって話をシてるんだが理解してる? テキストの入力、加工、出力以外の処理を無理に書くべきじゃない それ以上のことがやりたくなったら別の言語使った方が楽 シェルスクリプトでcpやrmを実行するなとか言ってんの? アホじゃね? お前シェルスクリプトの使い方を間違ってるよ むしろテキストの加工ならなんの言語でやってもいい どこの会社でもやたら批判的な発言をするものの具体的な答えは何も示さず 相手が何を言い返しても分かった風の立場で「それは違う」と上から目線で言い続けるだけのマシーンっているよね 一言目から答え出しておけば無駄な会話もなくなるのに 変な会社に勤めてるんだな 自分の特殊な環境なのに全体にするとか ネットによく居るタイプだな cpもmvも処理の途中でやるもんじゃないよ。出力とみなして最後にやりなよ ファイルをロックしてまで、やっているスクリプトは珍しい 普通は、ファイルが存在しなければ、そこでエラーになるだけ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる