シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その31
https://mevius.5ch.net/test/read.cgi/tech/1565446670/
探検
シェルスクリプト総合 その32
■ このスレッドは過去ログ倉庫に格納されています
2019/10/25(金) 00:08:45.53ID:6btPTvif
699デフォルトの名無しさん
2020/02/26(水) 15:55:24.01ID:vrfGqddo >>698
分かってもらえたみたいでよかった。
分かってもらえたみたいでよかった。
700デフォルトの名無しさん
2020/02/26(水) 23:24:46.41ID:iwwM4ZEx >>691
使い物にならんから外部コマンドなし縛りにして、その結果複雑な書き方捨てたって事なんですが...
個人的には -help が --help の書き間違いとして拾ってくれずに -h -e -l -p になるのが気に食わんのですよ
使い物にならんから外部コマンドなし縛りにして、その結果複雑な書き方捨てたって事なんですが...
個人的には -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", "あ"] }
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", "あ"] }
702デフォルトの名無しさん
2020/02/27(木) 01:10:41.62ID:WuLbJO/f >>700
その一文字オプションの連結に対応しなければいいだけじゃん
その一文字オプションの連結に対応しなければいいだけじゃん
703デフォルトの名無しさん
2020/02/27(木) 10:15:09.64ID:1d0gnp8c704700
2020/02/28(金) 00:12:31.43ID:sbmuwMBZ706デフォルトの名無しさん
2020/02/28(金) 21:07:42.16ID:11SJpN8G > 個人的には -help が --help の書き間違いとして拾ってくれずに
-help が --help の書き間違いとして拾ってくれるものなんてある?
-help が --help の書き間違いとして拾ってくれるものなんてある?
707デフォルトの名無しさん
2020/02/28(金) 21:16:46.81ID:9ZnEM/be >>700
> 使い物にならんから外部コマンドなし縛りにして、その結果複雑な書き方捨てたって事なんですが...
外部コマンドを使うと遅くなって使い物にならないから、
外部コマンドなし縛りで自分でパーサーを実装すればいいだけ。
それができないから「下手すぎw」と言ってるわけです。
まあ自分で作れないなら仕方ないけどw
> 使い物にならんから外部コマンドなし縛りにして、その結果複雑な書き方捨てたって事なんですが...
外部コマンドを使うと遅くなって使い物にならないから、
外部コマンドなし縛りで自分でパーサーを実装すればいいだけ。
それができないから「下手すぎw」と言ってるわけです。
まあ自分で作れないなら仕方ないけどw
708デフォルトの名無しさん
2020/02/29(土) 08:02:48.75ID:A8pIm3Di うわぁー
709デフォルトの名無しさん
2020/02/29(土) 08:10:25.23ID:wnu08hYu 外部コマンドを使おうが使うまいが、パーサーのアルゴリズムに大差ないだろ?
今まで外部コマンドを使ってパースしてたなら、
それを外部コマンドを使わずにパースするだけじゃん
何が難しいというのか?
今まで外部コマンドを使ってパースしてたなら、
それを外部コマンドを使わずにパースするだけじゃん
何が難しいというのか?
710700
2020/02/29(土) 09:04:49.63ID:toFJGN/1711デフォルトの名無しさん
2020/02/29(土) 09:27:10.60ID:Z90YN+Q9712デフォルトの名無しさん
2020/02/29(土) 13:13:04.89ID:IP0SEm6N なんか、車輪の再発明みたいなことになってるなw
713デフォルトの名無しさん
2020/02/29(土) 14:05:54.81ID:MM7sekhX getoptが使い物にならないんだから
作らないとしょうがない
作らないとしょうがない
714デフォルトの名無しさん
2020/03/01(日) 11:37:30.39ID:4tQoD8Fw × getopt
○ getopts
○ getopts
715デフォルトの名無しさん
2020/03/01(日) 12:51:34.60ID:4c8klxdl シェルスクリプト用のオプションパーサーって無いの?getopt/getopts以外で
716デフォルトの名無しさん
2020/03/01(日) 12:56:04.13ID:4tQoD8Fw717デフォルトの名無しさん
2020/03/01(日) 13:09:15.84ID:4c8klxdl >>716
それはgo製じゃん
それはgo製じゃん
718デフォルトの名無しさん
2020/03/01(日) 13:11:39.38ID:TiMroEot > docopts : the command line wrapper for bash.
719デフォルトの名無しさん
2020/03/01(日) 13:16:40.87ID:4c8klxdl bashってのもマイナス点だな
720デフォルトの名無しさん
2020/03/01(日) 14:02:23.94ID:4tQoD8Fw >>717
シェルスクリプト用のあれこれはすべてシェルスクリプト製じゃないといけない
なんて思ってないよな?
俺の知っているシェル・OS環境は,
sortやgrepみたいな外部コマンドどころか for文や変数処理みたいなシェルの内部動作も
みんなC言語で書かれてるんだが…
シェルスクリプト用のあれこれはすべてシェルスクリプト製じゃないといけない
なんて思ってないよな?
俺の知っているシェル・OS環境は,
sortやgrepみたいな外部コマンドどころか for文や変数処理みたいなシェルの内部動作も
みんなC言語で書かれてるんだが…
721デフォルトの名無しさん
2020/03/01(日) 14:28:49.88ID:4c8klxdl シェルスクリプト製じゃないと、1つのファイルに出来ないじゃん
722デフォルトの名無しさん
2020/03/01(日) 15:29:04.21ID:4tQoD8Fw × シェルスクリプト用のオプションパーサー
○ シェルスクリプト製のオプションパーサー
質問するときは明確な言葉で。
○ シェルスクリプト製のオプションパーサー
質問するときは明確な言葉で。
723デフォルトの名無しさん
2020/03/01(日) 16:13:34.61ID:DvIm3g7W ID:4c8klxdlの無能さ
724デフォルトの名無しさん
2020/03/02(月) 16:01:50.45ID:s5dtAso/ 外部コマンド使いなくないならBusyBoxみたいなの使うしかないよな。
725デフォルトの名無しさん
2020/03/02(月) 16:35:15.54ID:+7p1D0tE ビルトインコマンドでいいじゃん
726デフォルトの名無しさん
2020/03/02(月) 23:40:28.80ID:8PHDRupm -help が --help の書き間違いには、ならない。
-help は、h,e,l,p のオプションを連結した書き方で、文法的に正しいから
だから、オプションの連結を禁止すればよい
そうすれば、-h, -e, -l, -p みたいに、書かないといけないから、
-help は、絶対に間違いになるから、指摘できる
オプションの連結は、情報処理の教育を受けた社員を想定しているから、
勉強していないような素人には、難しすぎるw
-help は、h,e,l,p のオプションを連結した書き方で、文法的に正しいから
だから、オプションの連結を禁止すればよい
そうすれば、-h, -e, -l, -p みたいに、書かないといけないから、
-help は、絶対に間違いになるから、指摘できる
オプションの連結は、情報処理の教育を受けた社員を想定しているから、
勉強していないような素人には、難しすぎるw
727デフォルトの名無しさん
2020/03/03(火) 07:08:07.59ID:IKAJxND7 根本は中国人なのにマスコミも政府も絶対言わないし、
制限しない。
311の政府対応と同じ
政権変わっても変わらん
制限しない。
311の政府対応と同じ
政権変わっても変わらん
728デフォルトの名無しさん
2020/03/03(火) 07:53:58.76ID:4u1zxYLS 誤爆するガイキチ
729デフォルトの名無しさん
2020/03/03(火) 09:24:57.55ID:MNbayHdo >>726
情報処理の教育を受けた社員しか想定していないので問題ない
情報処理の教育を受けた社員しか想定していないので問題ない
730デフォルトの名無しさん
2020/03/03(火) 10:15:38.32ID:l2g6jfLd あとは自力で勉強探究心があるギーク向けだしな
731デフォルトの名無しさん
2020/03/03(火) 10:44:21.85ID:z64lrdXB find「せやな」
732デフォルトの名無しさん
2020/03/03(火) 12:18:09.49ID:3ukr+OhM 任意のオプション引数ってさ、
-help が -h elp って解釈されるよね?
-h -e -l -p とどうやって区別するの?
-help って書いた時どっちの意味になるの?
-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 を読み込もうとしているからだと思いますが
いい解決方法はないでしょうか?
~/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:5O39EjRd735デフォルトの名無しさん
2020/03/03(火) 14:06:21.11ID:yHaKKNdM >>734
いろいろあって、そこはシンボリックじゃないとだめなんですよ
いろいろあって、そこはシンボリックじゃないとだめなんですよ
736デフォルトの名無しさん
2020/03/03(火) 17:07:25.01ID:FfxSBx1I737デフォルトの名無しさん
2020/03/03(火) 17:55:54.44ID:n9Ghdw3q >>733
inc.shも~/bin(や特定固定のとこ)にシンボリックリンクを置いてしまえ
とか
pathme="$(which "$0")";
[ -L "$pathme" ] && pathme="$(readlink "$pathme")"
. "$(dirname "$pathme")/inc.sh"
とか
inc.shも~/bin(や特定固定のとこ)にシンボリックリンクを置いてしまえ
とか
pathme="$(which "$0")";
[ -L "$pathme" ] && pathme="$(readlink "$pathme")"
. "$(dirname "$pathme")/inc.sh"
とか
738デフォルトの名無しさん
2020/03/03(火) 18:16:56.75ID:n9Ghdw3q >>733
>~/bin/inc.sh を読み込もうとしているからだと思いますが
./inc.sh とかいう相対パスは現在のワーキングディレクトリ/カレントディレクトリからのだよ。sourceも同じく特殊なことはせずに
"$(pwd)/inc.sh" を読み込もうとしているのだろう
>~/bin/inc.sh を読み込もうとしているからだと思いますが
./inc.sh とかいう相対パスは現在のワーキングディレクトリ/カレントディレクトリからのだよ。sourceも同じく特殊なことはせずに
"$(pwd)/inc.sh" を読み込もうとしているのだろう
739デフォルトの名無しさん
2020/03/03(火) 19:32:36.52ID:PcLjcySC >>737
やっぱりreadlink使うしか無いですかね。
シンボリックのシンボリックのシンボリックとか考慮すると
readlink -fが必要になるけど、macOS版だとgreadlinkじゃないと動かないし
そもそもgreadlinkが入ってないとか、その他のOSではどうなるの?とか。
そういう面倒なコードはライブラリにしたいけど、そのライブラリを読み込むのに苦労するというw
やっぱりreadlink使うしか無いですかね。
シンボリックのシンボリックのシンボリックとか考慮すると
readlink -fが必要になるけど、macOS版だとgreadlinkじゃないと動かないし
そもそもgreadlinkが入ってないとか、その他のOSではどうなるの?とか。
そういう面倒なコードはライブラリにしたいけど、そのライブラリを読み込むのに苦労するというw
740デフォルトの名無しさん
2020/03/03(火) 19:58:06.90ID:BC6YzT5m 後出しかよ
シンボリックのシンボリックのシンボリック
なら、三行書けばいいだけじゃん
やっぱりって何がやっぱりなんだか
シンボリックのシンボリックのシンボリック
なら、三行書けばいいだけじゃん
やっぱりって何がやっぱりなんだか
741デフォルトの名無しさん
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じゃなかったのね。煩そうだからそこも
[ "$pathme" = "" ] && pathme="$0"
while [ -L "$pathme" ]; do
pathme="$(readlink "$pathme")"
done
. "$(dirname "$pathme")/inc.sh"
で、いいんじゃねえのかよぉ?なんでこんな簡単な対処も?と思うのでなんか穴があるか???
whichってPOSIXじゃなかったのね。煩そうだからそこも
742デフォルトの名無しさん
2020/03/03(火) 20:07:32.72ID:BC6YzT5m あ、二行目はいらない。もしくは一行目の||の後ろ
743デフォルトの名無しさん
2020/03/03(火) 20:41:22.45ID:Lk6RorVj744デフォルトの名無しさん
2020/03/03(火) 20:47:57.53ID:BC6YzT5m なんかぐちぐち言っているけど、そんなこと対処すぐ自分でできるでしょなことをぐちぐちとという
ぐちぐち言う奴にはリアルでもムカつく沸点は低いのは確かだがなw
それと後出しなら当然のようにではなくて、すまんがが先にありがだろうに、何を当たり前のようにというのだな。リアルでもねw
ぐちぐち言う奴にはリアルでもムカつく沸点は低いのは確かだがなw
それと後出しなら当然のようにではなくて、すまんがが先にありがだろうに、何を当たり前のようにというのだな。リアルでもねw
745デフォルトの名無しさん
2020/03/03(火) 20:55:19.44ID:dHOuVCIc 意訳 謝罪しろ
746デフォルトの名無しさん
2020/03/03(火) 20:57:44.45ID:BC6YzT5m そう読めるなら、沸点は俺より低すぎだな
747デフォルトの名無しさん
2020/03/03(火) 20:59:54.63ID:FfxSBx1I つまり自分の沸点の低さは自覚してるって訳か。
ひとまず安心した。
ひとまず安心した。
748デフォルトの名無しさん
2020/03/03(火) 21:00:37.28ID:BC6YzT5m うむ。キレやすく冷めやすいなw
749デフォルトの名無しさん
2020/03/03(火) 21:01:39.37ID:UParEwxG 相手が何も考えてないと思ってるんだろうね。
そのやり方にはこういう問題があるって言ったら、
知ってるなら先にかけ!だもんな(苦笑)
そのやり方にはこういう問題があるって言ったら、
知ってるなら先にかけ!だもんな(苦笑)
750デフォルトの名無しさん
2020/03/03(火) 21:04:21.79ID:BC6YzT5m 読めてないな、全然w
のくせに絡みたいのね。苦笑がいい味付けだねw苦笑いするぞ
のくせに絡みたいのね。苦笑がいい味付けだねw苦笑いするぞ
751デフォルトの名無しさん
2020/03/03(火) 21:05:27.34ID:V11R45Nz 毎度ながら回答者に問題があるよな
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
752デフォルトの名無しさん
2020/03/03(火) 21:07:13.53ID:BC6YzT5m 何をそんなにひ弱なのかわからん...当事者でもないのに
>>740でそんなにダメージ受けるのか?一応ちゃんと回答してもいるんだがな。ひ弱すぎだろう
>>740でそんなにダメージ受けるのか?一応ちゃんと回答してもいるんだがな。ひ弱すぎだろう
753デフォルトの名無しさん
2020/03/03(火) 21:44:55.64ID:FfxSBx1I 弱い犬ほどなんとやら
754デフォルトの名無しさん
2020/03/03(火) 21:53:18.68ID:BC6YzT5m 本題ではない瑣末wなことに拘るねえ、延々と。その動機がわからん
そう言うことだよ、皮肉屋さん
そう言うことだよ、皮肉屋さん
755デフォルトの名無しさん
2020/03/04(水) 00:47:20.27ID:Hp65i7gp 煽るわけじゃないけどさ、シェル芸してる人って
アルゴリズムと呼べるようなコードを書ける人が少ない気がする
スクリプト言語で用意されてる便利な関数は使えても
その関数を自分で実装することはできないレベル
C言語で簡単な設定ファイルのパーサーも作れなさそう
アルゴリズムと呼べるようなコードを書ける人が少ない気がする
スクリプト言語で用意されてる便利な関数は使えても
その関数を自分で実装することはできないレベル
C言語で簡単な設定ファイルのパーサーも作れなさそう
756デフォルトの名無しさん
2020/03/04(水) 01:10:12.01ID:nNNW6i++ >>733
Ruby で言えば、
require './file' は、カレントディレクトリからの相対パスだけど、
require_relative './file' は、現在のファイルからの相対パスになる
つまり、require_relative './file' は、__dir__ + "/file"
__dir__ は、現在のソースファイル(__FILE__)のあるディレクトリ名を、正規化された絶対パスで返します。
シンボリックリンクも解決されます
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"}
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"}
758デフォルトの名無しさん
2020/03/04(水) 02:42:11.83ID:NN2zD8QV 知恵袋の最後の方で回答している気でいる雑種かな
759デフォルトの名無しさん
2020/03/04(水) 05:44:22.12ID:aHZx5rgw >>755
シェル芸ってなんの話?
シェル芸ってなんの話?
760デフォルトの名無しさん
2020/03/04(水) 08:01:55.10ID:1RejiZvB >>759
qiitaとかtwitterでシェル芸で検索するとわかるよ
難読化(笑)とか意味のないことを一行でやったすげーとか言ってる連中
シェルスクリプトにもプログラムを書くのに必要な機能はあるのに
一行(シェル芸)で書くか、さもなければ他の言語のライブラリを使うしかないって考えてる連中
シェルスクリプトで一行で書けなければ、他の言語を使って数行かけて書くが
そもそもシェルスクリプトで数行書けば、他の言語より短く実現できたりするのに
アルゴリズムを書く能力がないからそれができない。そういう奴らが好きな言葉がシェル芸
目的の機能がないと何も出来ない。プリミティブな機能を使って実現する思考能力が欠けている
qiitaとかtwitterでシェル芸で検索するとわかるよ
難読化(笑)とか意味のないことを一行でやったすげーとか言ってる連中
シェルスクリプトにもプログラムを書くのに必要な機能はあるのに
一行(シェル芸)で書くか、さもなければ他の言語のライブラリを使うしかないって考えてる連中
シェルスクリプトで一行で書けなければ、他の言語を使って数行かけて書くが
そもそもシェルスクリプトで数行書けば、他の言語より短く実現できたりするのに
アルゴリズムを書く能力がないからそれができない。そういう奴らが好きな言葉がシェル芸
目的の機能がないと何も出来ない。プリミティブな機能を使って実現する思考能力が欠けている
761デフォルトの名無しさん
2020/03/04(水) 08:06:58.23ID:Eb7SAM7+ このスレでのだろう
自分がただ嫌悪しているのをいきなり表明されても
自分がただ嫌悪しているのをいきなり表明されても
762デフォルトの名無しさん
2020/03/04(水) 08:12:50.48ID:1RejiZvB 新しい話題を始めただけやで
763デフォルトの名無しさん
2020/03/04(水) 11:31:06.93ID:8C7aLz+2 一般論だが
目的が解決できれば解決策は簡単な方がいい
シェルスクリプトで一行で書けるのならそれにこしたことはない
シェルスクリプトだと処理の限界もあらかじめ分かっているというおまけつき
目的が解決できれば解決策は簡単な方がいい
シェルスクリプトで一行で書けるのならそれにこしたことはない
シェルスクリプトだと処理の限界もあらかじめ分かっているというおまけつき
764デフォルトの名無しさん
2020/03/04(水) 11:53:24.17ID:nNNW6i++ シェル芸は、Software Design で、上田隆一が連載しているものだろ。
次回で連載終了だけど
たいてい、awk を使う
次回で連載終了だけど
たいてい、awk を使う
765デフォルトの名無しさん
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言語の限界」と言うやつはいないだろう。だけどシェルスクリプトだと
それをシェルスクリプトの限界だと言う。単に自分の力の限界なだけなのにな。
シェルスクリプトでプログラミングしないなら
「POSIXコマンドプログラミング」って改名したほうが良いと思う
awkプログラミングでもいいけどなw
シェル(CLIから実行するもの)とシェルスクリプト(.shファイルにまとめたもの)と
厳密に区別してるならいいけど、実際にはシェルスクリプトの中でシェル芸してるんだよなw
例えばRubyなんかでも外部コマンドを呼び出せるわけでRubyのなかでシェル芸もできる。
これをRubyコードと呼べるかというと疑問がでるだろう?それと同じ。
>>763
> 目的が解決できれば解決策は簡単な方がいい
という条件からすると、Rubyのなかでシェル芸するのが正解なパターンは結構多いと思う。
でもやらないことの方が多いだろう。理由はなんだろうか?処理速度かな?
その理由と同じものが、シェルスクリプトにも当てはまると思う。
つまり(Rubyの場合と同様に)シェルスクリプトの中でシェル芸すんな(笑)
> シェルスクリプトだと処理の限界もあらかじめ分かっているというおまけつき
一行では書けなくても、数行書けば実現できることも多い。
シェル芸しかできないから、一行で書けなければムリと諦めてる奴が多い。
たとえばRubyだと1行でできることが、C言語だと数行かかることは多いが、
それを「C言語の限界」と言うやつはいないだろう。だけどシェルスクリプトだと
それをシェルスクリプトの限界だと言う。単に自分の力の限界なだけなのにな。
766デフォルトの名無しさん
2020/03/04(水) 16:11:16.83ID:nkrxx/zT767デフォルトの名無しさん
2020/03/04(水) 16:14:02.93ID:yiNVycVp ロジックが整理されておらず
バグが多数潜んでるシェルスクリプトかのような長文
言語が考え方に影響を与えることが分かるいい例だな
バグが多数潜んでるシェルスクリプトかのような長文
言語が考え方に影響を与えることが分かるいい例だな
768デフォルトの名無しさん
2020/03/04(水) 16:37:48.08ID:Tzh2DSUj769デフォルトの名無しさん
2020/03/04(水) 18:50:02.63ID:RW1/oxrb いちゃもんつける(自分のストレス発散)のが目的なもんだから
段落ごとの方向性がバラバラでつながりが無い/意味不明な文章
段落ごとの方向性がバラバラでつながりが無い/意味不明な文章
770デフォルトの名無しさん
2020/03/04(水) 19:11:58.65ID:Tzh2DSUj というレスはイチャモン以外の何物でもないけどなw
771デフォルトの名無しさん
2020/03/04(水) 23:41:25.17ID:ito9Fws2772デフォルトの名無しさん
2020/03/04(水) 23:48:29.11ID:NdgTFoKb >>771
PATHから探したいんじゃないぞ
PATHから探したいんじゃないぞ
773756
2020/03/05(木) 00:24:52.81ID:PBcHTAfh >>756
に書いてある
つまり、カレントディレクトリからの相対パスではなく、
このファイルからの相対パスになる
だから、このファイルがあるディレクトリの絶対パスを求めて、
それに相対パスを加えるとよい
に書いてある
つまり、カレントディレクトリからの相対パスではなく、
このファイルからの相対パスになる
だから、このファイルがあるディレクトリの絶対パスを求めて、
それに相対パスを加えるとよい
774デフォルトの名無しさん
2020/03/05(木) 00:25:52.24ID:npHipiyQ >>773
絶対パスってどういう意味で言ってる?
絶対パスってどういう意味で言ってる?
775デフォルトの名無しさん
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
に書いてあるけど、例えば、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
777デフォルトの名無しさん
2020/03/05(木) 07:57:16.42ID:GG3NZ1nL ただのガイキチか
778デフォルトの名無しさん
2020/03/06(金) 15:44:20.26ID:el16gBAN Rubyの人に質問するけど
Rubyでは引数処理に便利な機能って標準で提供されてるの?
Rubyでは引数処理に便利な機能って標準で提供されてるの?
779デフォルトの名無しさん
2020/03/06(金) 16:18:48.95ID:dB1opsgL すでに書かれてるだろ。自演か?w
興味あるならあれが標準かとか具体的なのは自分で調べろよ、もしくはRubyスレでだな
興味あるならあれが標準かとか具体的なのは自分で調べろよ、もしくはRubyスレでだな
780デフォルトの名無しさん
2020/03/06(金) 23:22:42.71ID:VrRz91DJ >>779
Rubyのヒトは会話を装う自演なんて高等なことはできないぞw
Rubyのヒトは会話を装う自演なんて高等なことはできないぞw
781デフォルトの名無しさん
2020/03/06(金) 23:52:31.10ID:uvQVOrPP ようやくbashに慣れてきたけど最低限覚えとけって言語はなんだろうか
頻繁に使うのはsed・awk・grep程度なんでやるならperlの方がいいのかね
今後のためにpythonをと言われても素人に使う機会ないわ
頻繁に使うのはsed・awk・grep程度なんでやるならperlの方がいいのかね
今後のためにpythonをと言われても素人に使う機会ないわ
782デフォルトの名無しさん
2020/03/06(金) 23:59:29.67ID:dfpAZ0dm783デフォルトの名無しさん
2020/03/07(土) 00:00:23.26ID:z518jRtl >>778
ARGV, ARGFが組み込み、OptionParserが標準添付ライブラリで提供されてる
ARGVは配列に引数が入ってるやつでだいだいどの言語にもあるやつ
ARGV[0]が実行コマンドじゃなく1つ目の引数になってるのが微妙に使いやすい
ARGFは引数でファイル名を受け取る場合と
標準入力でファイルを受け取る場合を1つの処理で書ける便利なやつ
Ruby以外では見たことない
OptionParserはショートオプション/ロングオプション/サブコマンドとかをサポートしてて
getoptやgetoptsに比べれば書きやすいし便利ではある
ただもっと高機能なgemもあるので依存性とのトレードオフでライブラリを選ぶ感じ
総じて簡単には書けるんだけどPerlなんかに比べるとインタプリタの起動が超遅いから
コマンド叩いてから処理が終わるまでの時間が比較的長い場合にしか使わない
ARGV, ARGFが組み込み、OptionParserが標準添付ライブラリで提供されてる
ARGVは配列に引数が入ってるやつでだいだいどの言語にもあるやつ
ARGV[0]が実行コマンドじゃなく1つ目の引数になってるのが微妙に使いやすい
ARGFは引数でファイル名を受け取る場合と
標準入力でファイルを受け取る場合を1つの処理で書ける便利なやつ
Ruby以外では見たことない
OptionParserはショートオプション/ロングオプション/サブコマンドとかをサポートしてて
getoptやgetoptsに比べれば書きやすいし便利ではある
ただもっと高機能なgemもあるので依存性とのトレードオフでライブラリを選ぶ感じ
総じて簡単には書けるんだけどPerlなんかに比べるとインタプリタの起動が超遅いから
コマンド叩いてから処理が終わるまでの時間が比較的長い場合にしか使わない
784デフォルトの名無しさん
2020/03/07(土) 10:41:41.36ID:EQxW6/Yc >>780
どうだろう?w
どうだろう?w
785デフォルトの名無しさん
2020/03/07(土) 13:57:14.80ID:wqSODED6 if文でディレクトリの権限を確認するにはどうしたらいいですか?
-wをやってみたのですがうまく動作してくれません。
ファイルにしか使えないのですかね?
-wをやってみたのですがうまく動作してくれません。
ファイルにしか使えないのですかね?
786デフォルトの名無しさん
2020/03/07(土) 19:03:29.05ID:Tac4Jm8B rootだからじゃね?いちおう対象がディレクトリも-wで書き込みの可否は返してるけど
787デフォルトの名無しさん
2020/03/07(土) 22:08:31.10ID:wqSODED6 >>786
動作としては書き込み権限の有無を確認し、無ければ付与するという動作が作りたかったです。
いろいろ調べたところrootだとパーミッションを無視するらしいので、
if [ ! -w ディレクトリ ]
上記の記載をしているスクリプトの実行ユーザがrootの為、全てにおいて書き込み権限があると認識されてしまっていると考えられます。
動作としては書き込み権限の有無を確認し、無ければ付与するという動作が作りたかったです。
いろいろ調べたところrootだとパーミッションを無視するらしいので、
if [ ! -w ディレクトリ ]
上記の記載をしているスクリプトの実行ユーザがrootの為、全てにおいて書き込み権限があると認識されてしまっていると考えられます。
788デフォルトの名無しさん
2020/03/07(土) 23:54:32.58ID:hanAtv/p 「chmod ディレクトリ」で検索!
789デフォルトの名無しさん
2020/03/08(日) 00:08:43.59ID:rfEr1WGY >>788
chmodでディレクトリの権限を000にしても可能でしたが…
chmodでディレクトリの権限を000にしても可能でしたが…
790デフォルトの名無しさん
2020/03/08(日) 00:50:11.68ID:TYqtbVyi パーミッションチェックじゃなくて書き込みができるか?だったはず
791デフォルトの名無しさん
2020/03/08(日) 02:47:35.54ID:rfEr1WGY >>790
そうなのですね。
それであれば、000にしてもrootは書き込み可能だから毎回書き込み権限が付与されないは正しい挙動ですね。
実行ユーザーを一般ユーザーに変えるか、lsの結果にwの文字があるかを判別する処理に変えるが対処法になりそうですね。
そうなのですね。
それであれば、000にしてもrootは書き込み可能だから毎回書き込み権限が付与されないは正しい挙動ですね。
実行ユーザーを一般ユーザーに変えるか、lsの結果にwの文字があるかを判別する処理に変えるが対処法になりそうですね。
792デフォルトの名無しさん
2020/03/08(日) 03:12:50.23ID:P20sq25k >>791
そう、思い出した。ファイルのパーミッションを自分から読み書きできないように変更して
本当に読み書きできないか、-wや-rでチェックするコードを書いたら、rootの場合は
それが上手くいかなかった。だからrootではそのチェックをしないようにした。
そう、思い出した。ファイルのパーミッションを自分から読み書きできないように変更して
本当に読み書きできないか、-wや-rでチェックするコードを書いたら、rootの場合は
それが上手くいかなかった。だからrootではそのチェックをしないようにした。
793デフォルトの名無しさん
2020/03/08(日) 05:16:19.40ID:Xv2JcybJ rootの場合でも対象に書き込めるんだから真っ当な動作だわな
794デフォルトの名無しさん
2020/03/08(日) 12:36:43.71ID:uLLaNXsz rootが「一見書き込めない」ファイルは存在しうるけど
「書き込む許可をどうしても得られない」ファイルはシステムの不具合でもない限り存在しないからね。
じゃなきゃそのファイルを誰が処理するのかって話になる。
UID 0は自分が持ち上げられない岩は作れないのだ。
「書き込む許可をどうしても得られない」ファイルはシステムの不具合でもない限り存在しないからね。
じゃなきゃそのファイルを誰が処理するのかって話になる。
UID 0は自分が持ち上げられない岩は作れないのだ。
795デフォルトの名無しさん
2020/03/08(日) 19:11:47.52ID:RzwfZ5D7 Read onlyでマウントしたのはボリュームはrootでも書き込めないよね。そもそも書き込めないメディアも
あくまでも-wは書き込めるかの判定だから使う側が勘違いしてるだけで判定としてはrootでも全く正常な動き
あくまでも-wは書き込めるかの判定だから使う側が勘違いしてるだけで判定としてはrootでも全く正常な動き
796デフォルトの名無しさん
2020/03/08(日) 19:58:45.91ID:T8rZAzyK cd -Lの-Lってデフォルト?
797デフォルトの名無しさん
2020/03/08(日) 20:25:40.77ID:kizyo8RY デファクトでデフォルト
798デフォルトの名無しさん
2020/03/08(日) 22:45:41.68ID:rfEr1WGY >>795
スクリプトを一般ユーザーで実行した際に書き込み権限があるかを判別するって認識でいいんですかね?
rootだと基本全部書き込めるから、一般ユーザーくらいでしか機能しない処理のような気がします。
スクリプトを一般ユーザーで実行した際に書き込み権限があるかを判別するって認識でいいんですかね?
rootだと基本全部書き込めるから、一般ユーザーくらいでしか機能しない処理のような気がします。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【国際法を無視】日本での「中華人民共和国に台湾問題を論じる資格なし」との声に 中国外交部が厳しく反論… ★2 [BFU★]
- 【ネット民のツッコミ】立憲・野田代表の「事実上の撤回」発言がトレンド、「高市さんそんな事は言ってない」「流石に無理あるだろw」 [1ゲットロボ★]
- 【工作員】「X」のアカウント所在地公開機能が暴いた世論操作の実態 MAGA支持著名アカウントの多くが米国外から運営 日本にも波及 ★3 [ごまカンパチ★]
- 生クリームだけの真っ白なクリスマスケーキ 大手メーカーが販売、その理由は…フルーツなしで価格は半額以下に ★3 [おっさん友の会★]
- 【文春】元TOKIO・国分太一(51)「女性スタッフ2名への“わいせつ事案”」日テレ事情聴取の全貌が分かった! ★5 [Ailuropoda melanoleuca★]
- 国分太一 騒動で「数日間の間で全てを失った」 涙ながらに率直な心境吐露 [Anonymous★]
- まったりまったりおじゃる丸待機スレ🏡
- どうしたらおまえが苦しむか、人生を踏み躙れるか
- ズッシリ重たくてもったりとした食感のプリン
- 中国外務省「全く不十分だ。ごまかすような手口を使うべきではない」高市答弁を批判 [834922174]
- 今日からPython勉強する
- コンビニバイトしてるんだが袋いるか聞いても何も答えないのに後から袋つけろてキレてくる奴何なの?
