[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2ch.scのread.cgiへ]
Update time : 01/12 09:15 / Filesize : 284 KB / Number-of Response : 907
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 11:53:21.38 ID:BBiLRgnj0.net]
!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512
シェルスクリプトに関する総合スレッドです。

スレ立て時は以下の文を先頭行に加えて下さい。
後のつけ忘れ防止の為に複数行重ねて追加推奨
!extend:on:vvvvv:1000:512

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。

前スレ
シェルスクリプト総合 その28
mevius.5ch.net/test/read.cgi/tech/1532397676/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

201 名前:デフォルトの名無しさん mailto:sage [2018/10/06(土) 08:41:27.69 ID:Sfai+wMy0.net]
訂正

その手続き型コーディングがステップ数が多く処理効率が低いと書いてある所だが
その原因は手続き型コーディングのせいじゃない

202 名前:デフォルトの名無しさん mailto:sage [2018/10/06(土) 10:50:18.29 ID:10V4sLOp0.net]
>>200
非本質的だけど
rm -f $(files)とかだとARG_MAXに引っ掛かる可能性がない?
尤も手元の機械では
$ getconf ARG_MAX
2097152
だったので無問題かも知れないけど。

203 名前:デフォルトの名無しさん mailto:sage [2018/10/06(土) 11:49:41.89 ID:Sfai+wMy0.net]
>>202
> rm -f $(files)とかだとARG_MAXに引っ掛かる可能性がない?
あるよ。それならxargsを使えばいいし、
xargsはファイルから読み込む方法もあるからパイプ使わなくても使える。
ともかく速さの理由はストリーミング型コーディングではないと言いたかっただけ

だいたいawkの中に書いてあるコードは手続き型だろといいたいし、
ステップ数だってちょっと書き方変えれば、大差ないってのがわかるだろう

i=3; while [ $i -le 10000 ]; do rm -f "file${i}.txt"
i=$((i+3)); done

awk 'BEGIN{for(i=3;i<=10000;i+=3){print i;}}' |
sed 's/.*/file&.txt/' |
xargs rm -f

204 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 07:00:55.51 ID:9DLOHMhB0.net]
お題

関数fooに対して3つ以上の引数を渡した時、1番目と2番目の引数を入れ替え以下の例のように出力せよ
(引数が3つ未満の場合は考慮する必要はなし)

ただし、シェルビルトイン関数のみを使い、変数の使用は禁止とする
(ここでいう変数とはsetコマンドで表示されるもののことである)

foo 1 2 3 4 5
2
1
3
4
5

レベル1: 引数に使用する文字は英数のみとする
レベル2: 引数にダブルクォート、シングルクォート、スペース、タブが含まれていても動作するようにせよ

205 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 07:03:41.18 ID:9DLOHMhB0.net]
あ、いかん。>>204は簡単な解答があるわw
ちょっと修正する

206 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 07:13:43.37 ID:9DLOHMhB0.net]
お題(>>204の訂正版)

次のような関数barがある。
bar() { echo 'begin'; printf '%s\n' "$@"; echo 'end'; }

3つ以上の引数を渡した時、1番目と2番目の引数を入れ替えて関数barを呼び出す関数fooを作成し
以下の例のような出力をせよ(引数が3つ未満の場合は考慮する必要はなし)

ただし、シェルビルトイン関数のみを使い、変数の使用は禁止とする
(ここでいう変数とはsetコマンドで表示されるもののことである)

foo 1 2 3 4 5

[出力]
begin
2
1
3
4
5
end

レベル1: 引数に使用する文字は英数のみとする
レベル2: 引数にダブルクォート、シングルクォート、スペース、タブが含まれていても動作するようにせよ

207 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 07:18:54.69 ID:9DLOHMhB0.net]
余談だが、

func() { printf '%s\n' "begin$@end";} という関数の時、

func 1 2 3 4 5 って書いたら

begin1
2
3
4
5end

func 3 って書いたら
begin3end

って表示されるんだよな。

理解はできるが、なんか不思議だ

208 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 03:36:26.64 ID:tKqgyITq0.net]
お題はお題スレに

プログラミングのお題スレ Part12
https://mevius.5ch.net/test/read.cgi/tech/1538096947/

209 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 18:41:40.22 ID:IMi/szTI0.net]
func -a --foo file1 -b file2 -c --bar

みたいな、オプションとファイル名が交互に来てるときに
オプションを全部解析し終わってから
ファイルに対して処理を実行していくのってけっこう大変なんだな
forで回すのもwhileで回すのも一筋縄ではいかない
もちろんbashなんかの配列を使わないという前提



210 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 18:48:20.63 ID:IMi/szTI0.net]
func -a --foo foo1 file1 -b file2 -c --bar

あ、例えば、foo1は--fooはパラメータ、のようなものが有る場合だった
-で始まる or 始まらないだけで見分けるならまだ簡単

211 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 18:50:15.77 ID:NcWFD+EU0.net]
そもそもそんな指定の仕方ありうる?
ありえない状況を想定してヤキモキするのは非生産的だと思うんだけど……。

212 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 19:10:00.18 ID:IMi/szTI0.net]
>>211
よくやるよ。
前打ったコマンドをヒストリで呼び出して、後ろにオプション追加して実行とか

213 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 20:52:36.04 ID:NcWFD+EU0.net]
>>212
仮にそうだとして ということは
>>210を正規化≠キると
func -a --foo foo1 -b -c --bar -- file1 file2
っていうことかな?

214 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 21:02:29.11 ID:IMi/szTI0.net]
>>213
そういうこと

215 名前:デフォルトの名無しさん [2018/10/08(月) 23:31:18.49 ID:tKqgyITq0.net]
GNUのgetoptのロングのやつ使えればなんとかなるんじゃないか?

216 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 02:27:08.37 ID:cJ7fFqob0.net]
これでいいな。
$ getopt --options 'a,b,c' --longoptions 'foo:,bar' -- -a --foo foo1 file1 -b file2 -c --bar

217 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 02:29:18.52 ID:i1ZCVGtYa.net]
195から207まで丸ごと吹っ飛んでんだがどんだけレスバトルしてたんだ
見る気もないが

218 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 07:22:02.82 ID:UgeI4/Dm0.net]
>>216
Macでは動きませんでした

219 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 07:51:19.69 ID:cJ7fFqob0.net]
>>218
たのむから一つ前のレスくらい読んでくれ>>215



220 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 07:55:02.13 ID:UgeI4/Dm0.net]
>>219
だからMacのgetoptはGNUのgetpotではないから動かないって言ったんだけど?

221 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 07:57:18.12 ID:UgeI4/Dm0.net]
GNUのgetoptなら動く。そうでないなら動かないと言われても、
どの環境がGNUのgetoptかなんてわからないでしょう?

GNUのgetoptがほとんどの環境で使われているなら問題ないが
使われてな環境は多いかもしれない。そしてそれがMacという形で
現実になったということを書いたんだけど

222 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 07:58:09.40 ID:cJ7fFqob0.net]
>>220
ああそうなの。
Macのgetopt(1)がGNU製じゃないことを知らないような書きぶりだったから てっきり。
すまんな

つーか孰れにしても可搬性は皆無w

223 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 08:18:38.20 ID:UgeI4/Dm0.net]
やはりgetoptは可搬性は皆無か

日本語でgetoptでぐぐるとこれが上の方に出てくるけど
相変わらずの、qiitaクオリティってことでいいのかな?
https://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb

> 一般に 使用される getopt のテンプレートは以下です。
>
> getopt.sh
> set -- 'getopt ad: "$@"'
初っ端からおかしいし。バッククォート書いたつもりが、シングルクォートに化けた?
しかもset --じゃだめだろうと思ってたら、後半では正しい書き方してたが

> OPT=`getopt -o ab:c --long long-a, long-b:,long-c -- "$@"`
> 略
> eval set -- "$OPT"

で、次
> getopt には重大な落とし穴があります。それは、スペースや特殊文字が
> 引数に含まれていた場合、正しく処理できないということです。

特殊文字まではやってないが、スペース入れても普通に動いたんだが?
デフォルトでクォートされてるよな?

man getoptすると「伝統的なgetoptの実装では 〜略〜 空白 〜略〜 使うことができない 〜略〜
この実装ではクォートした出力を生成する」ってことは(この記事で言及できないほど)最近対応したのか?
それはそれとしてクォート方法の指定ができて、shとbash(違いあるの?)があるからシェルごとに
使い分けなきゃいけない気がしていやなんだが

ま、この記事のBSD系ではロングオプション非対応っていうのはgetoptを候補からすばやく外すのには役に立ったなw
GNU版ならもう少し色々できることがわかったが、やはり大変だな。今回は書かなかったがサブコマンド対応とか。
あとgetopt使っても自前処理でもコードの量に大差ないってのはなんなだろう?と前から思っている

224 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 13:51:30.72 ID:cJ7fFqob0.net]
parsargコマンドみたいなのを再発明したほうが早いかもね
GNU getoptと同じ(もしくはもうちょっと拡張)挙動でかつ可搬なのを。

225 名前:デフォルトの名無しさん mailto:sage [2018/10/15(月) 14:55:49.61 ID:Q15q2Q7Cd.net]
質問しようと思ったけど初心者の俺にはレベル高い話ばかりで恥ずかしいぜ、、

226 名前:デフォルトの名無しさん mailto:sage [2018/10/15(月) 15:15:36.15 ID:9UZy+Ppr0.net]
どうぞどうぞ

227 名前:デフォルトの名無しさん mailto:sage [2018/10/15(月) 15:50:29.54 ID:Q15q2Q7Cd.net]
ありがとう
やりたいことは、環境を判定して対象の環境にある複数サーバーに対して一括でコマンド発行したい、です

条件
・A環境とB環境があり、引数でそれぞれ指定し(test.sh A のようにしたい)、シェルスクリプト側でどちらが入力されたか判定する

・サーバーにssh接続するためのIPアドレス等は外部ファイルに記載されているため、環境判定後にファイルを読み込んでsshアクセスする必要がある

・サーバーは両環境それぞれ25台ずつあるが、5台ずつコマンドを発行し、waitしてからまた5台と、塊毎にやりたい

質問1
外部ファイルの指定方法が分からないです
ifで環境を判定してthenの後にファイルを指定すれば良いのか?

質問2
5台ずつ、を実現するためにはwhileで良いのか?
そもそも、sshをまとめてやって後からそれらにコマンド発行ってできるのか

初歩的すぎて恥ずかしい限りですがお願いします

228 名前:デフォルトの名無しさん [2018/10/15(月) 15:55:57.71 ID:oz1FOCTra.net]
どうぞどうぞ

229 名前:デフォルトの名無しさん mailto:sage [2018/10/15(月) 16:39:55.24 ID:Q15q2Q7Cd.net]
>>227
自己解決
やり方を変えることにしました



230 名前:デフォルトの名無しさん mailto:sage [2018/10/15(月) 16:43:11.45 ID:9UZy+Ppr0.net]
どういたしまして

231 名前:デフォルトの名無しさん mailto:sage [2018/10/15(月) 18:26:03.30 ID:A4+xGAqjM.net]
僕にも感謝して

232 名前:デフォルトの名無しさん [2018/10/15(月) 18:56:32.85 ID:3C5NcaRXa.net]
>>229
どうやることにしたの?

233 名前:デフォルトの名無しさん mailto:sage [2018/10/15(月) 20:03:34.75 ID:dTacK6h30.net]
ssh ... [command] ができるのがわかったとかじゃないのかな

234 名前:デフォルトの名無しさん mailto:sage [2018/10/15(月) 21:27:00.70 ID:0gVRdy5i0.net]
>>232
233の言うとおりです
opensshのマニュアル呼んだら、ファイル指定もコマンド発行方法も書いてあったので、それでやることに
あとはifとの組み合わせで頑張ります
まぁつまずいてるんだけど

235 名前:デフォルトの名無しさん mailto:sage [2018/10/15(月) 21:32:13.05 ID:E6pr56BO0.net]
 私たち日本人の、日本国憲法を改正しましょう。
総ム省の、『憲法改正國民投票法』、でググって
みてください。拡散も含め、お願い致します。

236 名前:デフォルトの名無しさん mailto:sage [2018/10/18(木) 12:14:09.96 ID:/ofNkRJS0.net]
ksh、関数のオーバーライド、くせっていうかバグあるわ

(foo() { echo 1; }; foo; (foo() { echo 2; }; foo;); foo)
何度実行しても1 2 1 と表示される(想定通り)

foo() { echo 1; }; foo; (foo() { echo 2; }; foo;); foo
最初の1回は1 2 1 と表示されるが、
2回目以降は1 1 1 としか表示されない(2でオーバーライドできなくなる)

237 名前:デフォルトの名無しさん mailto:sage [2018/10/18(木) 12:32:51.57 ID:/ofNkRJS0.net]
もう一つ。kshで関数の定義の場所でオーバーライドできない
場合があるんだが原因がよくわからない。

多分これ関連なんだろうけど
https://github.com/modernish/modernish/blob/master/libexec/modernish/cap/BUG_FNSUBSH.t
これはメインシェルの定義がある場合、サブシェルの中での定義が無視されるということだから、
サブシェルの中で定義していれば、その中のサブシェルではオーバーライドできると解釈できる
たしかに>>236はそのとおりの動きはしてる

もう一つの問題も同じなんだろうか、定義の順番を変えればうまくいくんだが
サブシェルに関しては定義の順番を変えても同じだと思うんだけどなぁ。
.コマンドを使ってるのが関係してるのかなんだこりゃって感じだ

238 名前:デフォルトの名無しさん mailto:sage [2018/10/18(木) 12:40:28.86 ID:/ofNkRJS0.net]
もう一つの問題は、ちょっとコードが入り組んでて調べるのが面倒くさい。
なんでこれで解決したのかわかってない状況だが、今のところ動いているので
まあなにかわかったら書くよw

239 名前:デフォルトの名無しさん mailto:sage [2018/10/18(木) 16:05:20.75 ID:q7k/ngFed.net]
初心者です、while文の質問です
このようなスクリプトがあったとします
a=0
while [ $a -le 50 ]
do
a=`expr $a +1`
echo "${a}個目
done

とやると、50個目まで表示されると思いますが、この数値が5の倍数の時だけ、echoで表示させたあとsleepを入れるようにするには、contiuneを使えばよい?
それともifでやる?
よくわからず



240 名前:デフォルトの名無しさん [2018/10/18(木) 16:38:15.26 ID:hfM3a7YWa.net]
>>239
continue はループ内のその後の処理を飛ばすやつだからできないと思うが。

普通に if 使ってやるしかないのでは?
if [ `expr $a % 5` -eq 0 ] ; then sleep 1 ; fi
とか、done の直前に入れる。

241 名前:デフォルトの名無しさん mailto:sage [2018/10/18(木) 17:31:05.73 ID:/ofNkRJS0.net]
>>240
> continue はループ内のその後の処理を飛ばすやつだからできないと思うが。
5の倍数以外でsleepを飛ばせばできるYO!

>>239
> とやると、50個目まで表示されると思いますが
51個目まで表示される

> a=`expr $a +1`
は a=$((a+1)) の方が良い
シェルによって実行されるから速い

俺だったらif使わないでこう書くかな
[ $(($a % 5)) = 0 ] && sleep 1
ただこの書き方は if を使った場合と完全に等価なわけじゃなくて
後続行実行時点でのexit codeが異なることがあるから使い方に注意だけど

242 名前:デフォルトの名無しさん [2018/10/18(木) 17:40:57.72 ID:hfM3a7YWa.net]
あ。そうか。なるほど。

243 名前:デフォルトの名無しさん mailto:sage [2018/10/18(木) 17:41:55.70 ID:/ofNkRJS0.net]
ついでだから書いておくと、
a=`expr $a +1` でも大差ないだろ?と思った人
WSLの酷さがわかるぞ

たった50回のループ、sleepを行わない状態で
a=$((a+1)) だと 約0.025秒なのに、
a=`expr $a +1` だと 約0.5秒にもなるのだ

10000回のループだと
a=$((a+1)) だと 約0.1秒のところ、
a=`expr $a +1` だと 約90秒

早くWSLのfokの遅さが解決すると良いな

244 名前:デフォルトの名無しさん mailto:sage [2018/10/18(木) 17:43:58.54 ID:/ofNkRJS0.net]
× [ $(($a % 5)) = 0 ] && sleep 1
○ [ $((a % 5)) = 0 ] && sleep 1

書き込む前に気づいて直したと思ったんだがコピペミスったか
上でも動かないわけではない。無駄なだけ

245 名前:デフォルトの名無しさん [2018/10/18(木) 17:56:39.61 ID:uRBurQVb0.net]
> [ $((a % 5)) = 0 ]
新旧混ぜんなw
arithmetic使うなら、そのままevaluation記法にしてしまえばいい。
((...))
あと、旧testでの数値比較は-eqを使え。

246 名前:デフォルトの名無しさん mailto:sage [2018/10/18(木) 18:24:07.81 ID:/ofNkRJS0.net]
>>245
ん? どういうふうに書くってこと?

>>237の件、ぼや〜っとだけどわかりかけてきた気がする

スクリプトのコードが.(ドット)コマンドで評価された時点で、
関数がすでに存在している場合、その関数を使用するコードがあれば
事前にリンクされているような動きをしている

その場合サブシェルで関数を再定義しようとしてもできないんじゃないかな
だから事前にリンクできないようにeval呼び出しに変更したら
再定義された方の関数を呼び出すようになった

247 名前:デフォルトの名無しさん [2018/10/18(木) 18:35:46.85 ID:uRBurQVb0.net]
((a % 5 == 0))&& ...
なんで一々ここまで言わんとわからんような奴が、他人の指摘しているんだろうかね。。。
-eqでの数値比較とか基本中の基本だろうに。

248 名前:デフォルトの名無しさん mailto:sage [2018/10/18(木) 18:50:03.03 ID:/ofNkRJS0.net]
>>247

$ dash -c 'a=0; ((a % 5 == 0)) && echo ok'
dash: 1: a: not found

$ dash -c 'a=0; (($a % 5 == 0)) && echo ok'
dash: 1: 0: Permission denied

なぜかって?
その書き方はPOSIX準拠じゃないもの

https://github.com/koalaman/shellcheck/wiki/SC2039#standalone-

249 名前:デフォルトの名無しさん mailto:sage [2018/10/18(木) 18:56:56.93 ID:/ofNkRJS0.net]
動かないコード出されて、偉そうにされても
やれやれって言うしか無いわなw



250 名前:デフォルトの名無しさん [2018/10/18(木) 19:33:42.29 ID:9i8IzX+1a.net]
(( )) ではなく [[ ]] では?

251 名前:デフォルトの名無しさん mailto:sage [2018/10/18(木) 19:37:12.04 ID:/ofNkRJS0.net]
[[ ]] もPOSIX準拠ではない

252 名前:デフォルトの名無しさん mailto:sage [2018/10/18(木) 22:39:25.80 ID:3W2GDYvfa.net]
またぽっじくすか

253 名前:デフォルトの名無しさん mailto:sage [2018/10/19(金) 00:21:19.12 ID:0zKHBU8T0.net]
>>239だけど、奥が深いね
if使わずにもできたりするのか
はぁ、先は長そうだ、ありがとう

254 名前:デフォルトの名無しさん mailto:sage [2018/10/19(金) 01:23:10.99 ID:JmLVta5V0.net]
cat file.txt | ( head; tail) は最高

255 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 02:22:05.90 ID:V0y1IBp60.net]
>>224
> parsargコマンドみたいなのを再発明したほうが早いかもね

違うもの調べてて、こういうのを見つけた。
見つけたってだけでどんなものかは調べていない

zentoo.hatenablog.com/entry/20110708/1310124831
> ちょっとした理由でgit-flow (https://github.com/nvie/gitflow) のソースを
> ちょっとちょっと眺めていたんだけど、内部でコマンドライン引数を
> パースするためにshflagsというツールが使われていたのでメモ。

256 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 06:26:18.72 ID:EzXK/x1W0.net]
>>254
おまえらなんでそんなに猫が好きなん?

257 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 12:30:19.19 ID:o8LOHz9N0.net]
それを疑問に思う人間に説明するのは困難だ

258 名前:デフォルトの名無しさん [2018/10/20(土) 12:37:11.93 ID:MzLaXRRvr.net]
猫好きてそんなに言語化しにくい複雑怪奇な感情持っとるんか?

259 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 12:43:08.81 ID:o8LOHz9N0.net]
例えば女をみて欲情しない人間に、なぜ欲情するのかを説明するのは難しいだろう
言葉を並べるだけなら本能だとか体の特徴なんかを言えるが、共感はされまい
つまりそれを疑問に感じる人間には、その時点ですでに納得させる言葉がないのだ



260 名前:デフォルトの名無しさん [2018/10/20(土) 12:48:37.62 ID:MzLaXRRvr.net]
でもそもそも説明するのが困難なのやろ?
おまえが言ったんやで

261 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 12:55:36.75 ID:V0y1IBp60.net]
おい、スレと無関係な話をして荒らすな

262 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 12:56:11.89 ID:o8LOHz9N0.net]
なぜ説明するのが困難かを説明したつもりだったんだが

263 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 13:01:22.08 ID:V0y1IBp60.net]
つまんねーよ。シェルスクリプトに関係ある話をしろ

ってか、>>206お願い

264 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 14:52:07.13 ID:ZWcyeiuM0.net]
お前がつまんねーんだよ

265 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 14:54:50.53 ID:2nu5r9gua.net]
なんかレス番飛んだけどなんだこれ

266 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 16:25:12.28 ID:EzXK/x1W0.net]
>>265
自分でそういう設定してんだろ。
ngしてますアピールうざいよ。

267 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 17:00:11.18 ID:ZWcyeiuM0.net]
なんか遠いレスの番号という意味じゃないの。てか、なんで噛み付いているんだか

268 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 17:06:13.46 ID:T0X8nuYVa.net]
ワッチョイ変わったのになんでNG効いてんだ?と思ったら課題マンだったのか

269 名前:デフォルトの名無しさん mailto:sage [2018/10/21(日) 03:41:54.16 ID:dQhyPQp/0.net]
あるパスがディレクトリで書き込み可能かは、[ -d "$path" ] とか [ -w "$path" ] で調べられるし、
所有者が自分自身であるかは-Gや-Oで調べられますが、
自分以外が読み書き不可能であることをチェックするにはどうしたら良いですかね?



270 名前:デフォルトの名無しさん mailto:sage [2018/10/21(日) 05:19:47.73 ID:C+Apg5Hi0.net]
ls

271 名前:デフォルトの名無しさん mailto:sage [2018/10/21(日) 05:42:25.02 ID:dQhyPQp/0.net]
やっぱlsしかないですかね。
このフォーマットって仕様化されてるんですよね

272 名前:デフォルトの名無しさん mailto:sage [2018/10/21(日) 06:29:17.52 ID:9NX69mCX0.net]
>>271
pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.html#tag_20_73_10

273 名前:デフォルトの名無しさん mailto:sage [2018/10/21(日) 06:34:56.07 ID:dQhyPQp/0.net]
ありがとう。だがオプション多すぎて読むのだりぃw

なんでだろ?どうもlsって解析する気にならないんだよな
人間向けのフォーマットでコンピュータが解釈するのに向いてない感じがしている
どこまでPOSIXで仕様化されてるのか、どこからが拡張なのか、オプション多すぎて(略

関係ないけど、ふと本棚を見たら
「lsを読まずにプログラマを名乗るな!」という本があったw
そういや買ったっけ(未読)

274 名前:デフォルトの名無しさん mailto:sage [2018/10/21(日) 06:42:08.88 ID:xQoMnSHc0.net]
pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.html
STDOUTに記述があるんだからそうじゃね

275 名前:デフォルトの名無しさん mailto:sage [2018/10/21(日) 06:42:50.73 ID:xQoMnSHc0.net]
あら被りすぎた。すまん

276 名前:デフォルトの名無しさん mailto:sage [2018/10/21(日) 06:45:46.73 ID:xQoMnSHc0.net]
>>273
>>272はPOSIXの仕様。>>269,270,271の目的には
If the -l option is specified, the following information shall be written for files other than character special and block special files:

If the -l option is specified, the following information shall be written for character special and block special files:
で書いてあるフォーマットだけだけどね

277 名前:デフォルトの名無しさん mailto:sage [2018/10/21(日) 07:33:05.64 ID:dQhyPQp/0.net]
そういや、macだとlsで

drwxr-xr-x+ や
drwxr-xr-x@ みたいに
後ろになにかくっついていることがあるな

> Implementations may add other characters to this list to represent other implementation-defined file types.
くっつけても良いってことなのか?

278 名前:デフォルトの名無しさん mailto:sage [2018/10/21(日) 11:22:28.24 ID:C+Apg5Hi0.net]
これだからマカーは馬鹿だと言われるんだなあ...

279 名前:デフォルトの名無しさん [2018/10/21(日) 20:00:09.31 ID:0dWokXAIa.net]
stat コマンドの出力解析した方が楽ではないか?
または find コマンドの -perm 利用してチェックして -exec でやらせたいことをやらせる。



280 名前:デフォルトの名無しさん mailto:sage [2018/10/21(日) 20:21:13.14 ID:dQhyPQp/0.net]
>>279
そこででてくるのが、またPOSIXですよ

statはPOSIXで規定されてない
SolarisやUP-UXには存在しない
更にLinuxとMacでオプションもフォーマットもぜんぜん違う

281 名前:デフォルトの名無しさん mailto:sage [2018/10/21(日) 22:04:44.47 ID:8BH3p2hm0.net]
標準入力の代わりにfileの内容を入力するのに、リダイレクトで
$ <file somecmd
とやる方式ってPOSIXで既定されてるっけ。
pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07_01
このへんに書いてそうなんだけど、それっぽい記述がない?

282 名前:デフォルトの名無しさん [2018/10/22(月) 02:54:50.03 ID:HyPH6OEy0.net]
>>280
じゃ、find で。
ファイルのパーミッションに 066 を and した時に 0 になるやつでいいのなら
find $dir -prune ! -perm -40 ! -perm -20 ! -perm -4 ! -perm -2 -exec やらせたいこと \;
のようにすればいいのではないかな。
pubs.opengroup.org/onlinepubs/9699919799/ で find コマンド見てみたら -perm はあるようなので。
もし GNU の find コマンド使えるようなら -perm /mode が使えて、これは何れかのビットが立っていれば
真になるので ! -perm /66 の一つで出来ると思う。

283 名前:デフォルトの名無しさん mailto:sage [2018/10/22(月) 03:01:30.80 ID:1Kkbm3du0.net]
GNUのfind使っていいという条件なら、GNUのlsやstatでいいじゃんw

284 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2018/10/22(月) 10:18:21.67 ID:8WYgXfgna.net]
その辺はご自由に。POSIX縛りがあってもこの場合にfindも使えるってだけの話なので。ls使いたいならそうすればいい。

285 名前:デフォルトの名無しさん mailto:sage [2018/10/22(月) 14:51:33.47 ID:JUwIDQm90.net]
>>281
これ分かる方います?

286 名前:デフォルトの名無しさん mailto:sage [2018/10/22(月) 16:55:54.61 ID:9s+yFzz3H.net]
>>281
2.1の5で、リダイレクトの処理をしてパラメーターリストから
除去するって書いてあるのと、
6でコマンド名を第0パラメーターとして渡すって書いてるってことは、
先頭もパラメーターリストの一部と解釈できるから、
暗に、先頭にリダイレクトがあってもいいってことを表してるんでは?

287 名前:デフォルトの名無しさん mailto:sage [2018/10/22(月) 19:08:52.43 ID:WU2zxBnF6.net]
>>286
明示はされてないのね。
でもありがとう。多分 大丈夫ということでしょう。

288 名前:デフォルトの名無しさん mailto:sage [2018/10/22(月) 19:09:38.93 ID:WU2zxBnF6.net]
あ、ワッチョイもIDも違うけど>>285です。

289 名前:デフォルトの名無しさん mailto:sage [2018/10/22(月) 21:35:03.82 ID:oF7wf0Ce0.net]
>>118
それはオブジェクト指向の話じゃない
C++の話だ

そもそもテンプレートやジェネリックは、型を明確にすることでバグを少なくしたり
速度を速くするためのもので、オブジェクト指向における問題点を解決するための追加機能

テンプレートやジェネリックを使うことでオブジェクト指向が不要になるのではなく
オブジェクト指向と組み合わせて使うことで問題点が改善される

テンプレートはオブジェクト指向と組み合わせずに使えたと思うが、
テンプレートの殆ど(ジェネリックは全て)はオブジェクト指向なしに使うことはできない



290 名前:デフォルトの名無しさん mailto:sage [2018/10/22(月) 21:47:50.25 ID:oF7wf0Ce0.net]
あ、書き込まれてないと思ったら書き込む場所間違えてたのかw

291 名前:デフォルトの名無しさん mailto:sage [2018/10/22(月) 23:23:26.53 ID:oF7wf0Ce0.net]
ただのメモ

各シェルの比較
hyperpolyglot.org/unix-shells

292 名前:デフォルトの名無しさん [2018/10/23(火) 13:27:19.16 ID:QwHjyvjPa.net]
シェルというか tar コマンドの問題なんだけど、tar tvf でアーカイブに入っているファイルのタイムスタンプを秒単位まで出す方法ある?
Linux で GNU tar のmanページ見た感じではなさそうなんだけど、やはり自作するしかないなかな。

293 名前:デフォルトの名無しさん mailto:sage [2018/10/23(火) 14:12:45.60 ID:mYtscksw0.net]
>>292
tar --full-time ...

294 名前:デフォルトの名無しさん [2018/10/23(火) 14:38:56.39 ID:QwHjyvjPa.net]
>>293
おお!ありがとう。新しい GNU tar にあるね。
最初CentOS6で試しててわからなかった。これは GNU tar 1.23 だ。
CentOS7は GNU tar 1.26 になっててこちらでは出来るしmanページにも書いてあった。

295 名前:デフォルトの名無しさん mailto:sage [2018/10/23(火) 15:22:22.26 ID:cKF5Z2eR0.net]
CentOS 6はそろそろサポート切れるんじゃないかしら
余計なお世話だが移行したほうがいいんでは

296 名前:デフォルトの名無しさん [2018/10/23(火) 15:35:42.08 ID:QwHjyvjPa.net]
>>295
するする。仕事でRHEL6のサーバ使っててそれの一部をテストする時に使ってただけなので。

297 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 13:45:54.07 ID:7aRL1OkY0.net]
すごい低レベルな質問で申し訳ないんだけど、
win用のGit-bashで.shファイルダブルクリックしたときに
DOS窓出さないで実行するのってどうすればいい?

298 名前:デフォルトの名無しさん [2018/10/25(木) 14:43:08.46 ID:hw/Q19JUa.net]
>>297
それもはやシェルかどうか関係なくてWindows固有の問題だと思うが、エクスプローラでそのファイル右クリックしてプロパティ出したらそんな感じの設定できるようになってない?
最小化した状態で実行するとか、そんなやつ。

299 名前:デフォルトの名無しさん [2018/10/25(木) 14:51:54.06 ID:hw/Q19JUa.net]
こうだ。

まずショートカット作り、そのショートカットのプロパティ出すと実行時の大きさを指定できる所があって、そこを最小化にすると実行時にタスクバーにアイコン出ているだけになる。



300 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 16:15:39.89 ID:7aRL1OkY0.net]
>>298
git-bash.exeだとできませんでしたが、bin/bash.exeでできました!
ありがとうございます。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<284KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef