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

■ このスレッドは過去ログ倉庫に格納されています
2019/10/25(金) 00:08:45.53ID:6btPTvif
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。

シェルスクリプト総合 その31
https://mevius.5ch.net/test/read.cgi/tech/1565446670/
2020/02/26(水) 08:09:52.20ID:vrfGqddo
>>688

-aの位置の次にある引数を取得するってこと?
でもそうすると
-bcaXXX
↑こういうときはどう解析するの?(-b,-cは引数を取らないオプション)
この形式のオプションもPOSIXでは許可されてるから
当然解析できなければならないけど。
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html
2020/02/26(水) 08:25:40.38ID:iwwM4ZEx
>>689
引数処理にこだわり始めるとスクリプト実行して引数解析終わるまで時間がかかるようになって
使い物にならなくなるので複雑な記法は全部捨てたわ
POSIXで許可されているから実装しなきゃならないというならPOSIXを窓から投げ捨てるべき
2020/02/26(水) 08:29:52.36ID:kXv4PxDr
>>690
下手すぎw どうせgrepとかsedとか外部コマンド持ち出してやったからだろ
だから外部コマンドなし縛りをするんだよ

>>689
話が変わってる。POSIX対応したいならgetoptsとかでは無理
qiitaに対応してるサンプルコードがあるから探せ
2020/02/26(水) 09:28:16.44ID:9H3dDcdo
bash によるオプション解析 - Qiita
https://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb
getoptsの存在すら知らずに横着して=~を使ってすまんな
オプションの集約ってこうも面倒だったのね
693デフォルトの名無しさん
垢版 |
2020/02/26(水) 09:48:23.19ID:re2OdmIW
timeoutで終了するプログラムの最後の1行だけを表示させたいどうするの?
2020/02/26(水) 09:54:37.39ID:kXv4PxDr
>>692
どの言語にもオプション解析用のライブラリがある理由が分かったろ?
2020/02/26(水) 11:26:08.87ID:vrfGqddo
ちなみにgetoptsコマンドはPOSIXで定義されてるけど,実はPOSIXが定めるオプション書式に対応していないっていう。
まあOpenGroup側も「任意のオプション引数は歴史的な理由以外で使ってはならない」って言ってる訳だし
仕方無い部分もあるけど。
一方で複数回登場する引数付きオプションは,ちゃんと現行のアプリケーションでの使用も許可されているにもかかわらず
getopts自身はそういうオプションに対する便利な機能をなんら提供してない。
2020/02/26(水) 13:10:48.18ID:iFRpldfA
>>695
任意のオプション引数ってどういうもののことを言ってる?
2020/02/26(水) 13:41:46.61ID:vrfGqddo
>>696
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html
ここを読め…と突き放すのはあんまりなんで説明すると

“optional option-argument”---任意のオプション引数っていうのは,
当該オプションのあとにそのオプションに対する(一つの)引数が指定されてもされなくてもいいような
オプションのこと。
manページの「書式」節で
somecmd -o[arg]
みたいに書かれている場合が該当する。
これは
somecmd -o
の時は「オプション-oが引数なしで指定された」と解釈し
somecmd -oXXX
の時は「オプション-oが引数XXXで指定された」と解釈,
somecmd -o XXX
のときは「オプション-oと,(それとは直接関係ない)被演算子XXXが指定された」と解釈する
という決まりになってる。

なおPOSIXでは規程されてないけど,長いオプションの場合は
任意のオプション引数を指定したければオプションとオプション引数を=で結ぶのが通例みたい。
--long-opt=XXX
↑こういう感じ。
2020/02/26(水) 13:46:00.81ID:Z7ha8duC
>>697
ああ、OKOK、ちゃんと分かってるね
2020/02/26(水) 15:55:24.01ID:vrfGqddo
>>698
分かってもらえたみたいでよかった。
2020/02/26(水) 23:24:46.41ID:iwwM4ZEx
>>691
使い物にならんから外部コマンドなし縛りにして、その結果複雑な書き方捨てたって事なんですが...

個人的には -help が --help の書き間違いとして拾ってくれずに -h -e -l -p になるのが気に食わんのですよ
701デフォルトの名無しさん
垢版 |
2020/02/27(木) 00:12:01.62ID:nCyLO+2A
Ruby の、OptionParser では、

require 'optparse'

ARGV.replace %w(-e abc -e あ)

opts = { }
ARGV.options do |o|
o.on( "-e パターン", "絞り込む" ) { |x|
( opts[ :pattern ] ||= [ ] ).push x } # 配列に追加する

o.parse!
end

p opts #=> { :pattern=>["abc", "あ"] }
2020/02/27(木) 01:10:41.62ID:WuLbJO/f
>>700
その一文字オプションの連結に対応しなければいいだけじゃん
2020/02/27(木) 10:15:09.64ID:1d0gnp8c
>>702
>>700じゃないけど
彼は実装者としての立場ではなくて
利用者としての立場からの意見では?
つまりオプションパーサーを作ってるんじゃなくて
既存のオプションパーサーが-help記法に対応してないってこと。
704700
垢版 |
2020/02/28(金) 00:12:31.43ID:sbmuwMBZ
>>702
はい。 その通りで連結は未対応なスクリプト書いています。
後は値が連結しているタイプ (--foo=goo) も未対応にしています。
705703
垢版 |
2020/02/28(金) 17:35:34.53ID:+yZJUcOk
>>704
やっぱりね
2020/02/28(金) 21:07:42.16ID:11SJpN8G
> 個人的には -help が --help の書き間違いとして拾ってくれずに
-help が --help の書き間違いとして拾ってくれるものなんてある?
2020/02/28(金) 21:16:46.81ID:9ZnEM/be
>>700
> 使い物にならんから外部コマンドなし縛りにして、その結果複雑な書き方捨てたって事なんですが...

外部コマンドを使うと遅くなって使い物にならないから、
外部コマンドなし縛りで自分でパーサーを実装すればいいだけ。
それができないから「下手すぎw」と言ってるわけです。
まあ自分で作れないなら仕方ないけどw
2020/02/29(土) 08:02:48.75ID:A8pIm3Di
うわぁー
2020/02/29(土) 08:10:25.23ID:wnu08hYu
外部コマンドを使おうが使うまいが、パーサーのアルゴリズムに大差ないだろ?
今まで外部コマンドを使ってパースしてたなら、
それを外部コマンドを使わずにパースするだけじゃん
何が難しいというのか?
710700
垢版 |
2020/02/29(土) 09:04:49.63ID:toFJGN/1
>>706
普通ないんだが、注意力が無い何かなのか、問い合わせしてくるユーザーもいて
対応に苦慮することになるんだわ

>>707,709
引数を前から順番に処理してくれない getopt を使わないと決めた途端に難しくなったんだわ
getopt 使わずに -zxf (ファイル名) を -z -x -f (ファイル名) に分割簡単にできる?
-zfx (ファイル名) にしたときエラー処理/クレーマー処理できる?
2020/02/29(土) 09:27:10.60ID:Z90YN+Q9
>>710
問い合わせくるユーザーが居るだけで対応する必要ないじゃん

> 分割簡単にできる?
俺はできるw
2020/02/29(土) 13:13:04.89ID:IP0SEm6N
なんか、車輪の再発明みたいなことになってるなw
2020/02/29(土) 14:05:54.81ID:MM7sekhX
getoptが使い物にならないんだから
作らないとしょうがない
2020/03/01(日) 11:37:30.39ID:4tQoD8Fw
× getopt
○ getopts
2020/03/01(日) 12:51:34.60ID:4c8klxdl
シェルスクリプト用のオプションパーサーって無いの?getopt/getopts以外で
2020/03/01(日) 12:56:04.13ID:4tQoD8Fw
>>715
https://github.com/docopt/docopts
2020/03/01(日) 13:09:15.84ID:4c8klxdl
>>716
それはgo製じゃん
2020/03/01(日) 13:11:39.38ID:TiMroEot
> docopts : the command line wrapper for bash.
2020/03/01(日) 13:16:40.87ID:4c8klxdl
bashってのもマイナス点だな
2020/03/01(日) 14:02:23.94ID:4tQoD8Fw
>>717
シェルスクリプト用のあれこれはすべてシェルスクリプト製じゃないといけない
なんて思ってないよな?

俺の知っているシェル・OS環境は,
sortやgrepみたいな外部コマンドどころか for文や変数処理みたいなシェルの内部動作も
みんなC言語で書かれてるんだが…
2020/03/01(日) 14:28:49.88ID:4c8klxdl
シェルスクリプト製じゃないと、1つのファイルに出来ないじゃん
2020/03/01(日) 15:29:04.21ID:4tQoD8Fw
× シェルスクリプト用のオプションパーサー
○ シェルスクリプト製のオプションパーサー

質問するときは明確な言葉で。
2020/03/01(日) 16:13:34.61ID:DvIm3g7W
ID:4c8klxdlの無能さ
724デフォルトの名無しさん
垢版 |
2020/03/02(月) 16:01:50.45ID:s5dtAso/
外部コマンド使いなくないならBusyBoxみたいなの使うしかないよな。
2020/03/02(月) 16:35:15.54ID:+7p1D0tE
ビルトインコマンドでいいじゃん
2020/03/02(月) 23:40:28.80ID:8PHDRupm
-help が --help の書き間違いには、ならない。
-help は、h,e,l,p のオプションを連結した書き方で、文法的に正しいから

だから、オプションの連結を禁止すればよい

そうすれば、-h, -e, -l, -p みたいに、書かないといけないから、
-help は、絶対に間違いになるから、指摘できる

オプションの連結は、情報処理の教育を受けた社員を想定しているから、
勉強していないような素人には、難しすぎるw
2020/03/03(火) 07:08:07.59ID:IKAJxND7
根本は中国人なのにマスコミも政府も絶対言わないし、
制限しない。

311の政府対応と同じ

政権変わっても変わらん
2020/03/03(火) 07:53:58.76ID:4u1zxYLS
誤爆するガイキチ
2020/03/03(火) 09:24:57.55ID:MNbayHdo
>>726
情報処理の教育を受けた社員しか想定していないので問題ない
2020/03/03(火) 10:15:38.32ID:l2g6jfLd
あとは自力で勉強探究心があるギーク向けだしな
2020/03/03(火) 10:44:21.85ID:z64lrdXB
find「せやな」
2020/03/03(火) 12:18:09.49ID:3ukr+OhM
任意のオプション引数ってさ、
-help が -h elp って解釈されるよね?
-h -e -l -p とどうやって区別するの?

-help って書いた時どっちの意味になるの?
733デフォルトの名無しさん
垢版 |
2020/03/03(火) 12:32:47.35ID:yHaKKNdM
あるスクリプトを作っていて、gitで管理しています。

~/src ← gitで管理
~/src/script.sh ← あるスクリプト
~/src/inc.sh ← あるスクリプトから読み込むライブラリ

script.sh から inc.sh を読み込むときに、
. ./inc.sh と書いています

script.sh をどのディレクトリからでも実行できるように
~/bin ディレクトリにシンボリックリンクを作成しました。
そして実行するとエラーになりました。

~/bin/inc.sh を読み込もうとしているからだと思いますが
いい解決方法はないでしょうか?
734デフォルトの名無しさん
垢版 |
2020/03/03(火) 14:02:09.02ID:5O39EjRd
>>733
~/bin/script.sh をシンボリックリンクではなく
cd ~/src && exec ./script.sh "$@"
を実行するシェルスクリプトにする
735デフォルトの名無しさん
垢版 |
2020/03/03(火) 14:06:21.11ID:yHaKKNdM
>>734
いろいろあって、そこはシンボリックじゃないとだめなんですよ
2020/03/03(火) 17:07:25.01ID:FfxSBx1I
>>732
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html
ここ読んで、どうぞ。
2020/03/03(火) 17:55:54.44ID:n9Ghdw3q
>>733
inc.shも~/bin(や特定固定のとこ)にシンボリックリンクを置いてしまえ
とか
pathme="$(which "$0")";
[ -L "$pathme" ] && pathme="$(readlink "$pathme")"
. "$(dirname "$pathme")/inc.sh"
とか
2020/03/03(火) 18:16:56.75ID:n9Ghdw3q
>>733
>~/bin/inc.sh を読み込もうとしているからだと思いますが
./inc.sh とかいう相対パスは現在のワーキングディレクトリ/カレントディレクトリからのだよ。sourceも同じく特殊なことはせずに
"$(pwd)/inc.sh" を読み込もうとしているのだろう
2020/03/03(火) 19:32:36.52ID:PcLjcySC
>>737
やっぱりreadlink使うしか無いですかね。
シンボリックのシンボリックのシンボリックとか考慮すると
readlink -fが必要になるけど、macOS版だとgreadlinkじゃないと動かないし
そもそもgreadlinkが入ってないとか、その他のOSではどうなるの?とか。
そういう面倒なコードはライブラリにしたいけど、そのライブラリを読み込むのに苦労するというw
2020/03/03(火) 19:58:06.90ID:BC6YzT5m
後出しかよ
シンボリックのシンボリックのシンボリック
なら、三行書けばいいだけじゃん
やっぱりって何がやっぱりなんだか
2020/03/03(火) 20:06:11.93ID:BC6YzT5m
pathme="$(command -v "$0")" || pathme="$0"
[ "$pathme" = "" ] && pathme="$0"
while [ -L "$pathme" ]; do
pathme="$(readlink "$pathme")"
done
. "$(dirname "$pathme")/inc.sh"
で、いいんじゃねえのかよぉ?なんでこんな簡単な対処も?と思うのでなんか穴があるか???
whichってPOSIXじゃなかったのね。煩そうだからそこも
2020/03/03(火) 20:07:32.72ID:BC6YzT5m
あ、二行目はいらない。もしくは一行目の||の後ろ
2020/03/03(火) 20:41:22.45ID:Lk6RorVj
>>740
沸点低すぎ。自分が欲しい情報を最初から全部準備しておけってか?
間違えるのが怖いってやつだなw
2020/03/03(火) 20:47:57.53ID:BC6YzT5m
なんかぐちぐち言っているけど、そんなこと対処すぐ自分でできるでしょなことをぐちぐちとという
ぐちぐち言う奴にはリアルでもムカつく沸点は低いのは確かだがなw

それと後出しなら当然のようにではなくて、すまんがが先にありがだろうに、何を当たり前のようにというのだな。リアルでもねw
2020/03/03(火) 20:55:19.44ID:dHOuVCIc
意訳 謝罪しろ
2020/03/03(火) 20:57:44.45ID:BC6YzT5m
そう読めるなら、沸点は俺より低すぎだな
2020/03/03(火) 20:59:54.63ID:FfxSBx1I
つまり自分の沸点の低さは自覚してるって訳か。
ひとまず安心した。
2020/03/03(火) 21:00:37.28ID:BC6YzT5m
うむ。キレやすく冷めやすいなw
2020/03/03(火) 21:01:39.37ID:UParEwxG
相手が何も考えてないと思ってるんだろうね。
そのやり方にはこういう問題があるって言ったら、
知ってるなら先にかけ!だもんな(苦笑)
2020/03/03(火) 21:04:21.79ID:BC6YzT5m
読めてないな、全然w
のくせに絡みたいのね。苦笑がいい味付けだねw苦笑いするぞ
2020/03/03(火) 21:05:27.34ID:V11R45Nz
毎度ながら回答者に問題があるよな

  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\
2020/03/03(火) 21:07:13.53ID:BC6YzT5m
何をそんなにひ弱なのかわからん...当事者でもないのに
>>740でそんなにダメージ受けるのか?一応ちゃんと回答してもいるんだがな。ひ弱すぎだろう
2020/03/03(火) 21:44:55.64ID:FfxSBx1I
弱い犬ほどなんとやら
2020/03/03(火) 21:53:18.68ID:BC6YzT5m
本題ではない瑣末wなことに拘るねえ、延々と。その動機がわからん
そう言うことだよ、皮肉屋さん
2020/03/04(水) 00:47:20.27ID:Hp65i7gp
煽るわけじゃないけどさ、シェル芸してる人って
アルゴリズムと呼べるようなコードを書ける人が少ない気がする

スクリプト言語で用意されてる便利な関数は使えても
その関数を自分で実装することはできないレベル
C言語で簡単な設定ファイルのパーサーも作れなさそう
2020/03/04(水) 01:10:12.01ID:nNNW6i++
>>733
Ruby で言えば、

require './file' は、カレントディレクトリからの相対パスだけど、
require_relative './file' は、現在のファイルからの相対パスになる

つまり、require_relative './file' は、__dir__ + "/file"

__dir__ は、現在のソースファイル(__FILE__)のあるディレクトリ名を、正規化された絶対パスで返します。
シンボリックリンクも解決されます
757701
垢版 |
2020/03/04(水) 01:34:09.01ID:nNNW6i++
>>732
Ruby の、OptionParser では、
-e オプションがあっても、-h オプションの引数、elp と解釈される

require 'optparse'

ARGV.replace %w(-help)

opts = { }
ARGV.options do |o|
o.on( "-e 引数", "引数" ) { |x| opts[ :e ] = x }
o.on( "-h 引数", "引数" ) { |x| opts[ :h ] = x }

o.parse!
end

p opts #=> {:h=>"elp"}
2020/03/04(水) 02:42:11.83ID:NN2zD8QV
知恵袋の最後の方で回答している気でいる雑種かな
2020/03/04(水) 05:44:22.12ID:aHZx5rgw
>>755
シェル芸ってなんの話?
2020/03/04(水) 08:01:55.10ID:1RejiZvB
>>759
qiitaとかtwitterでシェル芸で検索するとわかるよ
難読化(笑)とか意味のないことを一行でやったすげーとか言ってる連中

シェルスクリプトにもプログラムを書くのに必要な機能はあるのに
一行(シェル芸)で書くか、さもなければ他の言語のライブラリを使うしかないって考えてる連中

シェルスクリプトで一行で書けなければ、他の言語を使って数行かけて書くが
そもそもシェルスクリプトで数行書けば、他の言語より短く実現できたりするのに
アルゴリズムを書く能力がないからそれができない。そういう奴らが好きな言葉がシェル芸

目的の機能がないと何も出来ない。プリミティブな機能を使って実現する思考能力が欠けている
2020/03/04(水) 08:06:58.23ID:Eb7SAM7+
このスレでのだろう
自分がただ嫌悪しているのをいきなり表明されても
2020/03/04(水) 08:12:50.48ID:1RejiZvB
新しい話題を始めただけやで
2020/03/04(水) 11:31:06.93ID:8C7aLz+2
一般論だが
目的が解決できれば解決策は簡単な方がいい
シェルスクリプトで一行で書けるのならそれにこしたことはない
シェルスクリプトだと処理の限界もあらかじめ分かっているというおまけつき
2020/03/04(水) 11:53:24.17ID:nNNW6i++
シェル芸は、Software Design で、上田隆一が連載しているものだろ。
次回で連載終了だけど

たいてい、awk を使う
2020/03/04(水) 15:48:52.99ID:Tzh2DSUj
>>764
シェルスクリプトでプログラミングしないなら
「POSIXコマンドプログラミング」って改名したほうが良いと思う
awkプログラミングでもいいけどなw

シェル(CLIから実行するもの)とシェルスクリプト(.shファイルにまとめたもの)と
厳密に区別してるならいいけど、実際にはシェルスクリプトの中でシェル芸してるんだよなw

例えばRubyなんかでも外部コマンドを呼び出せるわけでRubyのなかでシェル芸もできる。
これをRubyコードと呼べるかというと疑問がでるだろう?それと同じ。

>>763
> 目的が解決できれば解決策は簡単な方がいい
という条件からすると、Rubyのなかでシェル芸するのが正解なパターンは結構多いと思う。
でもやらないことの方が多いだろう。理由はなんだろうか?処理速度かな?
その理由と同じものが、シェルスクリプトにも当てはまると思う。
つまり(Rubyの場合と同様に)シェルスクリプトの中でシェル芸すんな(笑)

> シェルスクリプトだと処理の限界もあらかじめ分かっているというおまけつき
一行では書けなくても、数行書けば実現できることも多い。
シェル芸しかできないから、一行で書けなければムリと諦めてる奴が多い。
たとえばRubyだと1行でできることが、C言語だと数行かかることは多いが、
それを「C言語の限界」と言うやつはいないだろう。だけどシェルスクリプトだと
それをシェルスクリプトの限界だと言う。単に自分の力の限界なだけなのにな。
2020/03/04(水) 16:11:16.83ID:nkrxx/zT
>>765
> 単に自分の力の限界なだけなのにな。

うむ、納得
2020/03/04(水) 16:14:02.93ID:yiNVycVp
ロジックが整理されておらず
バグが多数潜んでるシェルスクリプトかのような長文

言語が考え方に影響を与えることが分かるいい例だな
2020/03/04(水) 16:37:48.08ID:Tzh2DSUj
>>767
理由が書いてない、説明がまったくないので同意しないw
自分が思ったことつぶやいただけだな
2020/03/04(水) 18:50:02.63ID:RW1/oxrb
いちゃもんつける(自分のストレス発散)のが目的なもんだから
段落ごとの方向性がバラバラでつながりが無い/意味不明な文章
2020/03/04(水) 19:11:58.65ID:Tzh2DSUj
というレスはイチャモン以外の何物でもないけどなw
771デフォルトの名無しさん
垢版 |
2020/03/04(水) 23:41:25.17ID:ito9Fws2
>>733
. inc.sh
にすればPATHから探す
2020/03/04(水) 23:48:29.11ID:NdgTFoKb
>>771
PATHから探したいんじゃないぞ
773756
垢版 |
2020/03/05(木) 00:24:52.81ID:PBcHTAfh
>>756
に書いてある

つまり、カレントディレクトリからの相対パスではなく、
このファイルからの相対パスになる

だから、このファイルがあるディレクトリの絶対パスを求めて、
それに相対パスを加えるとよい
2020/03/05(木) 00:25:52.24ID:npHipiyQ
>>773
絶対パスってどういう意味で言ってる?
2020/03/05(木) 01:35:06.58ID:HPS3pF1O
>>758に納得してしまう
776756
垢版 |
2020/03/05(木) 04:40:53.09ID:PBcHTAfh
>>756
に書いてあるけど、例えば、Ruby では、
script.rb に、スクリプトを書いてるとき、

p __FILE__
p __dir__

出力
"c:/Users/Owner/Documents/test/script.rb"
"c:/Users/Owner/Documents/test"

__FILE__ は、このファイルの絶対パス、
__dir__ は、このファイルがあるディレクトリの絶対パスを表す

だから、このファイルから見て、相対パス、./file なら、
__dir__ + "/file"

つまり、c:/Users/Owner/Documents/test/file
2020/03/05(木) 07:57:16.42ID:GG3NZ1nL
ただのガイキチか
2020/03/06(金) 15:44:20.26ID:el16gBAN
Rubyの人に質問するけど
Rubyでは引数処理に便利な機能って標準で提供されてるの?
2020/03/06(金) 16:18:48.95ID:dB1opsgL
すでに書かれてるだろ。自演か?w
興味あるならあれが標準かとか具体的なのは自分で調べろよ、もしくはRubyスレでだな
2020/03/06(金) 23:22:42.71ID:VrRz91DJ
>>779
Rubyのヒトは会話を装う自演なんて高等なことはできないぞw
2020/03/06(金) 23:52:31.10ID:uvQVOrPP
ようやくbashに慣れてきたけど最低限覚えとけって言語はなんだろうか
頻繁に使うのはsed・awk・grep程度なんでやるならperlの方がいいのかね
今後のためにpythonをと言われても素人に使う機会ないわ
2020/03/06(金) 23:59:29.67ID:dfpAZ0dm
>>781
素人に使う機会がある
機能、用途を教えてくれないか?
2020/03/07(土) 00:00:23.26ID:z518jRtl
>>778
ARGV, ARGFが組み込み、OptionParserが標準添付ライブラリで提供されてる

ARGVは配列に引数が入ってるやつでだいだいどの言語にもあるやつ
ARGV[0]が実行コマンドじゃなく1つ目の引数になってるのが微妙に使いやすい

ARGFは引数でファイル名を受け取る場合と
標準入力でファイルを受け取る場合を1つの処理で書ける便利なやつ
Ruby以外では見たことない

OptionParserはショートオプション/ロングオプション/サブコマンドとかをサポートしてて
getoptやgetoptsに比べれば書きやすいし便利ではある
ただもっと高機能なgemもあるので依存性とのトレードオフでライブラリを選ぶ感じ

総じて簡単には書けるんだけどPerlなんかに比べるとインタプリタの起動が超遅いから
コマンド叩いてから処理が終わるまでの時間が比較的長い場合にしか使わない
2020/03/07(土) 10:41:41.36ID:EQxW6/Yc
>>780
どうだろう?w
785デフォルトの名無しさん
垢版 |
2020/03/07(土) 13:57:14.80ID:wqSODED6
if文でディレクトリの権限を確認するにはどうしたらいいですか?
-wをやってみたのですがうまく動作してくれません。
ファイルにしか使えないのですかね?
2020/03/07(土) 19:03:29.05ID:Tac4Jm8B
rootだからじゃね?いちおう対象がディレクトリも-wで書き込みの可否は返してるけど
787デフォルトの名無しさん
垢版 |
2020/03/07(土) 22:08:31.10ID:wqSODED6
>>786
動作としては書き込み権限の有無を確認し、無ければ付与するという動作が作りたかったです。
いろいろ調べたところrootだとパーミッションを無視するらしいので、
if [ ! -w ディレクトリ ]
上記の記載をしているスクリプトの実行ユーザがrootの為、全てにおいて書き込み権限があると認識されてしまっていると考えられます。
2020/03/07(土) 23:54:32.58ID:hanAtv/p
「chmod ディレクトリ」で検索!
789デフォルトの名無しさん
垢版 |
2020/03/08(日) 00:08:43.59ID:rfEr1WGY
>>788
chmodでディレクトリの権限を000にしても可能でしたが…
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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