2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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

1 :名無しさん@お腹いっぱい。:2017/03/20(月) 12:07:26.41 .net
シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
 FreeBSDユーザは/bin/shの正体がashなので注意。
 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
  http://src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/
  http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
 (理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
 「そういうのはperl使いましょう」と回答するのはやめましょう。
 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その25
http://echo.2ch.net/test/read.cgi/unix/1439563321/

955 :名無しさん@お腹いっぱい。:2018/05/03(木) 13:41:59.15 .net
>>954
まず安価しろ

956 :名無しさん@お腹いっぱい。:2018/05/03(木) 13:43:07.07 .net
例えばfindコマンドのように

find . -type f -exec chmod 600 {} \;

-execが来たら、chmodコマンドを;までをオプションとして
渡して実行みたいなのはスライス相当のものがないとできませんね

957 :名無しさん@お腹いっぱい。:2018/05/03(木) 13:44:07.01 .net
自分がやったことがないことだからって
問題が間違ってるということにはなりませんよ

958 :名無しさん@お腹いっぱい。:2018/05/03(木) 13:44:46.06 .net
>>953
根本的に何がしたいのかに依るんじゃねーのそれは
引数を解釈したいならgetoptでやるべきだが、今回やりたいのは引数のスライスそのものじゃね?
bashなら一行でできるそれをbash依存せずにやるにはどうすればって話なんじゃないか
まぁなんか妙なのが湧いてて話が無駄に複雑になってる感が否めないが

959 :名無しさん@お腹いっぱい。:2018/05/03(木) 13:47:13.94 .net
まあ言わないでもわかるでしょうが、
わざとスルーされないように言っておきますと、
-execは残りの引数を全て、指定したコマンドの引数として実行するものではなく
; までを引数とします。だから以下のように複数の-execもしていできます。

find . -type f -exec echo {} \; -exec echo {} \;

960 :名無しさん@お腹いっぱい。:2018/05/03(木) 13:53:29.10 .net
>>958
位置が固定ならいきなりスライスでも構わんが
今回のやつは任意の位置を指定したいと言っとるやろ
つまりその任意の位置がどこか分かった時点で引数の解析は終わっとるから
必要な引数も選別できているはずなんや
つまりそこからさらに位置指定でスライスしたいというのは
引数解析のアプローチが間違っとるいう訳やな

961 :名無しさん@お腹いっぱい。:2018/05/03(木) 14:10:06.58 .net
>>960
そして、その選別した引数(複数)を別の関数に渡すんだろ?
配列があれば、配列に選別していった引数を入れていけばいいだろうが
bash依存しないなら、配列は使えないよな。
お前ならどうするんだ?

962 :名無しさん@お腹いっぱい。:2018/05/03(木) 14:10:06.74 .net
>>960
任意の位置をどう指定するのかが要望ないからそこは>>922みたいな位置の直書きを想定してた
多分位置の指定まで引数に組み込むような汎用性高いものは要求されてないだろう
つまりいきなりスライスでいいと思ってる

963 :名無しさん@お腹いっぱい。:2018/05/03(木) 14:17:44.04 .net
>>961-962
関数に渡すならその引数に割り当てた変数に保存しとくだけやな
可変個ならevalするやろしw
どっちにしろもっと多くの状況がわからんと最適解は得られんわw

964 :名無しさん@お腹いっぱい。:2018/05/03(木) 14:21:33.10 .net
>>963
> 関数に渡すならその引数に割り当てた変数に保存しとくだけやな

>>917を読み返してみましょうか?
> 引数 $1 $2 $3 ・・・ のうち、特定の範囲n〜mを
> 別の関数の引数に渡すのってどうやればいいだろうか?
> n〜mは条件で変わるものとする


その引数に割り当てた変数とはなんですか?


結局↓これですか?
> 934 自分:名無しさん@お腹いっぱい。[sage] 投稿日:2018/05/03(木) 04:37:45.65
> eval使ったほうが簡潔かつ速い気がしてきたw

965 :名無しさん@お腹いっぱい。:2018/05/03(木) 14:22:57.28 .net
>>964
せやでw
こいつは問題を複雑に考えすぎとるだけやw

966 :名無しさん@お腹いっぱい。:2018/05/03(木) 14:23:53.17 .net
あれほど問題が間違っていると偉そうなこと言ったくせに
問題は間違ってないってことでいいんだろうな

967 :名無しさん@お腹いっぱい。:2018/05/03(木) 14:24:26.11 .net
>>965
そっちじゃない。
いきなり問題が間違っているといちゃもんを付けたことに
謝れって言ってる

968 :名無しさん@お腹いっぱい。:2018/05/03(木) 14:25:12.82 .net
>>966
正確には問題自体を複雑に考えすぎとるやなw
こいつの問題設定自体が間違っとるんやw

969 :名無しさん@お腹いっぱい。:2018/05/03(木) 14:25:16.94 .net
>>963
> どっちにしろもっと多くの状況がわからんと最適解は得られんわw

最初の質問の>>917に全て書かれてるじゃん
他に何の状況が知りたいのさ?

970 :名無しさん@お腹いっぱい。:2018/05/03(木) 14:26:18.22 .net
>>968
なんで問題設定に話をすり替えてるの?

問題は>>917。問題が間違ってるといちゃもんを付けたのは>>918

971 :名無しさん@お腹いっぱい。:2018/05/03(木) 14:26:43.00 .net
>>967
なんやおまえ質問した本人なんかw
ならもっと情報をさらけだしてみw
おにいちゃん達が手取り足取り教えてあげるやろからw

972 :名無しさん@お腹いっぱい。:2018/05/03(木) 14:28:32.21 .net
>>971
なんだお前が問題が間違ってるといちゃもんつけたやつか?
問題は間違っていませんでした、ごめんなさいって謝れば?

973 :名無しさん@お腹いっぱい。:2018/05/03(木) 14:29:43.06 .net
>>972
せやでw
てか教えて欲しいくせに何いきなりキレとんねんw
キチガイかおまえはw

974 :名無しさん@お腹いっぱい。:2018/05/03(木) 14:32:04.43 .net
はぁ?教えてもらうも何も>>935で自力で解いたし
>>937でeval使ったほうが良いかもって、
それは最初からわかってるよアピール(笑)もしたし
お前はなにか役に立ったのか?

俺に問題が間違ってるといちゃもんを付けた挙げ句
結局、俺の足元にも及んでないじゃんw

975 :名無しさん@お腹いっぱい。:2018/05/03(木) 14:34:28.22 .net
>>974
だからな?
もう少し柔軟なアタマと経験を持っとればそんな問題自体にぶちあたらんと言っとるのやでおいちゃんはw
人に教えてもらいたかったらもう少し素直になった方がええでおまえw

976 :名無しさん@お腹いっぱい。:2018/05/03(木) 14:38:23.58 .net
>>975
お前に経験がないから問題にぶち当たってないんだろうw

それで、お前質問に答えずに逃げてるよな?

>>960
そして、その選別した引数(複数)を別の関数に渡すんだろ?
配列があれば、配列に選別していった引数を入れていけばいいだろうが
bash依存しないなら、配列は使えないよな。
お前ならどうするんだ?

977 :名無しさん@お腹いっぱい。:2018/05/03(木) 14:40:51.17 .net
>>976
いくらお子ちゃまでもナチュラルに話がループするバカにつきあう気はないで生憎w

978 :名無しさん@お腹いっぱい。:2018/05/03(木) 14:40:58.71 .net
偉そうに>>960で引数の選別をする方法で
できるような言い方をしているということは、
"このやり方の続き" でやる方法も当然思いついてるはず
質問に答えようか。

まさかここまでいって、この方法じゃ実現不可能だった
なんていうはずがないよなw

979 :名無しさん@お腹いっぱい。:2018/05/03(木) 15:39:01.57 .net
やたらめったに長ったらしいコード書いたアホが元凶

980 :名無しさん@お腹いっぱい。:2018/05/03(木) 15:57:16.13 .net
たしかに俺のコードは長すぎたし引数に改行が含まれると各行を引数だと見做してしまう
修正が困難な不具合があるからね(もし可能だという方がいるなら是非教えてほしい)。
実は俺自身もシェルスクリプトの経験はあまりないんだ。まだ仕事してねーし。
それが原因で場が乱れたとするなら申し訳ない。
ただ、言わせてもらうが、俺は寧ろ荒れた原因は「問題が間違ってる; 質問は正しい態度で」なんていう
主張をageながら口説いてる奴にあると思うがな。

981 :名無しさん@お腹いっぱい。:2018/05/03(木) 16:20:04.93 .net
どっちもはしゃぎ過ぎ
それに、安価だのageだの馬鹿みたい

982 :名無しさん@お腹いっぱい。:2018/05/03(木) 16:29:15.75 .net
>>980
いや、だから>>935で自力で解いたってw
eval使ったほうが良さそうだけど
(ここまで自力の結論というかeval版は質問前に作っていたがね)

983 :名無しさん@お腹いっぱい。:2018/05/03(木) 16:29:46.34 .net
>>981
> それに、安価だのageだの馬鹿みたい
まったくだw 俺も最初からその2つは無視してるw

984 :名無しさん@お腹いっぱい。:2018/05/03(木) 16:31:30.06 .net
IDが出ないスレでこれほど見難い言い争いはあんま見ないな。いや醜いかw

985 :名無しさん@お腹いっぱい。:2018/05/03(木) 16:41:10.54 .net
ここって建設的じゃないよな、ホント

986 :名無しさん@お腹いっぱい。:2018/05/03(木) 17:10:05.54 .net
自力で解いたっつてんだろ、何度も。偉ぶってんのはどっちなんだか。

987 :名無しさん@お腹いっぱい。:2018/05/03(木) 17:33:34.69 .net
醜すぎw

988 :名無しさん@お腹いっぱい。:2018/05/03(木) 17:54:41.55 .net
はい、次スレ
シェルスクリプト総合 その27
https://mevius.5ch.net/test/read.cgi/unix/1525337663/

989 :名無しさん@お腹いっぱい。:2018/05/03(木) 19:24:32.42 .net
この人は問題を解きたいんじゃなくて
問題を自分のルールで解かせたいだけなんだと思う

990 :名無しさん@お腹いっぱい。:2018/05/03(木) 19:33:59.23 .net
自分のルールってなんのことや?

991 :名無しさん@お腹いっぱい。:2018/05/03(木) 20:13:25.91 .net
そうじゃなくて呈示されたコードの完成度が低くて、かつ
自分で作ったコードが要件を満たしていたから「お前ら馬鹿ばっかだな」になるんでしょう?

992 :名無しさん@お腹いっぱい。:2018/05/03(木) 20:15:23.07 .net
ただのお子ちゃまやないかw
間違っとる言われてボクは間違ってないてすねとるだけやでw

993 :名無しさん@お腹いっぱい。:2018/05/03(木) 20:27:22.30 .net
>>991
要件じゃなくて、あれはバグだよ
正しく動いてないじゃないか

994 :名無しさん@お腹いっぱい。:2018/05/03(木) 20:28:19.18 .net
いまいち誰が誰だかなわからない追うのめんどくさすぎなのに、論評続けるねえ
質問内容に文句つけ続けのオッサン:一理あるが、一理でしかない。しつこいわっ
質問したヤツ:自力で解いたとかウザいわ。だったら最初から質問すんなwおっさんの一理を理解して素直に受け取れ

995 :名無しさん@お腹いっぱい。:2018/05/03(木) 20:37:05.47 .net
>自力で解いたとかウザいわ。だったら最初から質問すんなw

書いた途端に解が分かったとかザラにあるだろ
お騒がせしました、とか書けない人格はアレだけど

996 :名無しさん@お腹いっぱい。:2018/05/03(木) 20:38:34.10 .net
>>995
一行目は問題にしてない、全く。言う通りだし
二行目を問題にしてる、ほぼそれが全部

997 :名無しさん@お腹いっぱい。:2018/05/03(木) 20:58:18.53 .net
能力はありそうに見えるのにもったいないよね。ああいうので仕事を失しなうってのは。
俺の同僚にも居たわ。正直に言って、俺より優秀だったのに人当たりが強すぎてやんわり退職させられて
先月会ったらトビやりながら独学でコーディングしてるらしい

998 :名無しさん@お腹いっぱい。:2018/05/05(土) 15:07:28.61 .net
すいません。すごく細かいことなんですが、
シェルの変数に関する展開で、
${somevar:-otherstring}
という、somevarに変数が格納されていなればotherstringを変数の値として採用するという仕組みがありますよね。
ここにコマンド展開が使えるということに最近気がつきました。
${somevar:-$(somecommand)}
これは、展開の順序としては
I. コマンド展開→変数の展開
 somecommandがresultを返し、${somevar:-result}になってresultが展開される
のか、
II. 変数の展開→コマンド展開
 ${somevar:-$(somecommand)}が$(somecommand)になってresultが返る
のか、
どちらか分かりますか?
ぶっちゃけ、この違いが影響するような状況に遭遇したことがないのですが、よりよいシェルスクリプトの理解の為にどうかよろしくおねがいします。

999 :名無しさん@お腹いっぱい。:2018/05/05(土) 15:36:58.33 .net
IIなんじゃねーの(鼻くそホジホジ)

1000 :名無しさん@お腹いっぱい。:2018/05/05(土) 23:01:08.19 .net
somecommandを副作用のあるコマンド(touchとかrmとか)にしでsomevarがある状態とない状態でそれぞれどうなるか比べてみればいい。たぶんIIだと思うが。

1001 :名無しさん@お腹いっぱい。:2018/05/06(日) 01:02:57.40 .net
>>1000
おぉう。そんな手があったとは。勉強になります。
おっしゃる通りIIでした。
somevarに変数が格納されている時、somecommandは実行されませんでした。

1002 :名無しさん@お腹いっぱい。:2018/05/06(日) 10:46:14.65 .net
echo 999

1003 :名無しさん@お腹いっぱい。:2018/05/06(日) 10:46:54.81 .net
exit 1000

1004 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1004
269 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★