TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
中級者もOK! FreeBSD質問スレッド
*BSDニュース@2ch その6
IPFilter関連スレッド vol1
30年後のUNIX板
Autoconf,Automakeについて
CPUの周波数の上げ方
プロフェッショナルがハッカー度を計ってくれるスレ
今何欲しい?(´∀` )
デーモン君のアスキーアート募集!!
X.Orgって、どうよ?

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


1 :2018/05/03 〜 最終レス :
シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)もしくはPOSIX準拠の互換シェルがデフォルトです。
 bash/zsh/ksh/ash/dash/yash/poshなどの専用機能に依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
 FreeBSDユーザは/bin/shの正体がashなので注意。
・POSIXについてのリンクは https://en.wikipedia.org/wiki/POSIX にまとめられています
 最新の仕様はこちらへ http://pubs.opengroup.org/onlinepubs/9699919799/
 (左上の「Shell & Utilities」 から参照することができます。)
・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に逃げずにシェルスクリプトで処理するのが頭のいいやり方。
 質問に対して問題が間違ってるといちゃもんをつけるのもやめましょう
前スレ シェルスクリプト総合 その26
https://mevius.2ch.sc/test/read.cgi/unix/1489979246/

2 :
FAQ

Q. 秘密結社シェルショッカーってなんですか?
A. しらん。どっかの変態団体やろ。近寄らんほうが良い。

Q. USP友の会ってなんですか?
A. しらん。どっかの変態団体やろ。近寄らんほうが良い。

Q. シェル芸ってなんですか?
A. しらん。ヲタ芸みたいなもんやろ。恥ずべきものや。

Q. ユニケージ開発手法ってなんですか?
A. しらん。所でアプリの開発には普通のプログラム言語使ったほうが良いぞ

3 :
シェルスクリプトの総合スレです。
初心者、学生、アマチュア、プロ、シェルの種類や OS を問いません。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずはテンプレートをご覧下さい。

★A. お約束
1. 特記なき場合は #!/bin/sh がデフォルトです。この場合可搬性に注意し、
 Traditional Bourne Shell もしくは、POSIX 相当のスクリプトでお願いします。
 bash / zsh / ksh / ash / dash や OS 等に依存する場合は、明示しましょう。
 良く分からない方は、使用している OS を書いておけば OK です。是非ご参加下さい。
2. 質問する前に、まず自分で調べましょう。ただし、
 「聞くは一時の恥、聞かぬは一生の恥」です。積極的に参加しましょう。
3. 相手を侮辱する発言、失礼な発言は差し控え、知的な議論を楽しみましょう。
4. 他者には様々な環境や事情、目的が有る事に留意し、無下に扱う様な発言は
 控えましょう。

★B. お約束の補足
1. Mac OS X では、/bin/sh の実体は bash です。また、一般的に BSD 系 や
 GNU/Linux の方は、/bin/sh がシンボリックリンクですので、注意して下さい。
 ls (ハイフン)l /bin/sh や readlink -e /bin/sh で確かめて下さい。
2. 可搬性については、下記 F.1 を参照して下さい。
3. POSIX については、man 7 standards や下記 F.2 ( の特に Shell & Utilities )
 を参照して下さい。
4. Traditional Bourne Shell とは、UNIX Version 7 から SVR4.2 の /bin/sh を元に
 小さなの改変を加え主に商用 UNIX で残されているものです。( 下記 F.3 参照 )
5. Traditional Bourne Shell で入手しやすい sh は、後期 SVR4.0 から派生し、
 SunOS 5 / OpenSolaris を経た、Heirloom Bourne Shell です。
 SVR4 / SVID3 相当です。同様の Unix utilities も扱っています。
 ( 下記 F.3 参照 )

4 :
★C. 初心者へのアドバイス
1. シェルスクリプトのことをシェルってゆーな
2. 知らないコマンドが出てきたら man コマンドで調べましょう。
3. UNIX には、シェルスクリプトに便利な小さなコマンドが色々あります。
 apropos ないしは man -k でそれらしい単語による簡単な検索もできます。
4. シェルの構文や内部コマンドは man sh で。英語は LANG=C man shで。
5. 思い通りに動かないときは、まずは #!/bin/sh -x でトレースしましょう。
6. 適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 awk / perl / javascript / ruby / python 等、他の (スクリプト) 言語の方が
 適した処理にはそちらを使いましょう。
7. シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題は正規表現スレへ
8. csh / tcsh のシェルスクリプトは推奨されません。理由は下記を参照
 http://www.speech-lab.org/~hiroki/csh-whynot.euc
9. cat file|すんなハゲ
 a. 詳細は "Useless Use of Cat" UUOC で検索して下さい
 b. 有用な場合も有ります Useful use of cat(1) 英文
  http://www.in-ulm.de/~mascheck/various/uuoc/

★D. シェルスクリプトでよく使うコマンド
1. 制御・条件判定系: [, test, expr, true, false, yes, getopts
2. テキスト処理系: cat, awk, sed, tr, sort, uniq, grep, wc, head, tail, cut,
 paste, comm, join
3. ファイル検索系: find ( スペースなどを含むファイル名を正しく処理するため、
 find は -exec command {} + を推奨。
 他に -print0、xargs は -0 オプションという方法もあるが Solaris 非対応 )
4. ディレクトリ系: basename, dirname
5. 出力系: echo, printf
6. 対話コマンド制御系: expect
7. http / ftp の処理自動化: wget, curl

5 :
★E. 学習用テキスト
1. Bourne Shell自習テキスト ( 1993年 ) pdf お薦め
 http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/
 (↑サイト消滅かも)
 http://ayapin.film.s.dendai.ac.jp/~matuda/Lecture/PDF/sh-two.pdf
2. UNIX FAQ LIST
 http://www.nurs.or.jp/~asada/FAQ/UNIX/UNIX.FAQ.html
(3. シェルを使おう - 導入からプログラミングまで - ( 2002年 )
 http://www.netfort.gr.jp/~tomokuni/lms/shell/ (リンク切れ))

★F. 参考リンク
1. 可搬性関連
 a. autoconf マニュアル 移植性のあるシェルプログラム
  http://www.gnu.org/software/autoconf/manual/autoconf.html#Portable-Shell
  http://www.geocities.jp/fut_nis/html/autoconf-ja/Portable-Shell.html
 b. Portability talk [Bash Hackers Wiki] 英文
  Obsolete and deprecated syntax も見る価値有り
  http://wiki.bash-hackers.org/scripting/nonportable
 c. How to make bash scripts work in dash 英文
  http://mywiki.wooledge.org/Bashism
 d. DashAsBinSh 英文
  https://wiki.ubuntu.com/DashAsBinSh
 e. Portable Shell Programming 英文
  http://www.in-ulm.de/~mascheck/various/portability/

6 :
2. POSIX
 The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2013 Edition 英文
 http://pubs.opengroup.org/onlinepubs/9699919799/
3. Traditional Bourne Shell 関連
 a. The Traditional Bourne Shell Family History and Development 英文
  http://www.in-ulm.de/~mascheck/bourne/
 b. BourneShell / Where does the Bourne shell live? 英文
  http://mywiki.wooledge.org/BourneShell
 c. The Heirloom Bourne Shell 英文
  http://heirloom.sourceforge.net/
4. マニュアル
 a. The Base Specifications Issue 7, 2013 Edition 英文
  http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
 b. FreeBSD 日本語マニュアル検索
  http://www.jp.freebsd.org/man-jp/search.html
 c. JM Project (Japanese)
  http://linuxjm.sourceforge.jp/
5. FAQ 等
 a. UNIXの部屋 ( 2011年 )
  http://x68000.q-e-d.net/~68user/unix/
 b. Linux JF (Japanese FAQ) Project
  http://linuxjf.osdn.jp/
 c. Advanced Bash-Scripting Guide 英文
  http://www.tldp.org/LDP/abs/html/
 d. Unix Programming FAQ 日本語訳 ( 2000年 )
  http://www.race.u-tokyo.ac.jp/~moro/unix-programmer/

7 :
6. ツール
 a. web tool です。Vim syntastic や Emacs の Flycheck でも使えます
  ShellCheck
  http://www.shellcheck.net/about.html
 b. vim 用 syntastic
  https://github.com/scrooloose/syntastic
 c. checkbashisms も使用してチェック duggan/shlint GitHub
  https://github.com/duggan/shlint

★G. 前スレ
1. ☆シェルスクリプトを勉強するにあたって☆
 http://hibari.2ch.sc/test/read.cgi/unix/989659936/
2. 便利なシェルスクリプト見せろ
 http://pc.2ch.sc/test/read.cgi/unix/996949546/
3. シェルスクリプト総合 その1
 http://pc5.2ch.sc/test/read.cgi/unix/1101820646/
後略。検索して下さい

8 :
★H. 関連スレ(UNIX板/プログラム板)
1. sed
 http://peace.2ch.sc/test/read.cgi/unix/1085730992/
2. 正規表現
 http://peace.2ch.sc/test/read.cgi/unix/1039165754/
3. Regular Expression(正規表現) Part13
 http://peace.2ch.sc/test/read.cgi/tech/1415149975/
4.Perlについての質問箱 64箱目 [転載禁止](c)2ch.sc
 http://peace.2ch.sc/test/read.cgi/tech/1417291896/
5. ECMAScript デス 4
 http://peace.2ch.sc/test/read.cgi/tech/1325448978/
6. Ruby 初心者スレッド Part 57©2ch.sc [転載禁止](c)2ch.sc
 http://peace.2ch.sc/test/read.cgi/tech/1426165733/
7. Pythonのお勉強 Part50
 http://peace.2ch.sc/test/read.cgi/tech/1413474092/
8. 【node.js】サーバサイドjavascript 3【io.js】(c)2ch.sc
 http://peace.2ch.sc/test/read.cgi/tech/1419673207/

★I. 現在評価待ち: X.n は予定した追加先。主にスレ立て人の判断保留用。

9 :
★え?Windowsでシェルを!?

Bash on Ubuntu on Windows©2ch.sc
https://mevius.2ch.sc/test/read.cgi/win/1470496450/

Win10がBash・linuxコマンドに公式ネイティブ対応★3 [無断転載禁止]©2ch.sc
https://mevius.2ch.sc/test/read.cgi/win/1459904955/

【Bash】Windows Subsystem for Linux【Ubuntu】2©2ch.sc
https://mao.2ch.sc/test/read.cgi/linux/1468149353/

Bash for Ubuntu for Windowsで開発しようぜ! [無断転載禁止]©2ch.sc
https://medaka.2ch.sc/test/read.cgi/prog/1493495197/

10 :


落ち着いたスレになりますように

11 :
シェルスクリプトの勉強をしたいです
WindowsよりMacの方がいいんですかね?

12 :
今Windows使ってるならその上で環境作った方が楽だと思うけど
わざわざMac買ったって他のことで苦労するよ

13 :
>>12
ありがとうございます
今Windowsでvirtualboxにubuntu入れてやっているんです
Macだと仮想環境じゃなくてその物がUNIXだから勉強するにはもっといいかなと思ったんです
職場が今年からMacになってしまいましたし

14 :
手始めにbashの入力履歴を自在に編集できるスクリプト組んでごらん

15 :
Windows 10ならWSLでUbuntuがほぼそのまま使えるやん

16 :
WSLってちゃちな玩具みたいなもんだろ
あんなもの使ってる奴がここにいるのか?
そもそろWindows10て

17 :
>>16
使えるよ
いままでcygwin入れてたけど、代わりに使ってる。

最近はちゃんと動くし、
cygwinよりはちゃんとしてるから色々使いやすい。
飽くまでもローカルでのツール的な使い方でね
あとはGimpとかわざわざWin32版を使ってたようなものもそうする必要語なくなった。

サーバで動かすようなものを作る場合はちゃんとlinuxネイティブの環境でコンパイルから動作確認までする。

18 :
>>16
WSLがおもちゃじゃないと認めるにはなにが必要?
多分すでに実現できてると思うけどさ

19 :
このスレの親だっけか。aliasが便利っていうレスがあったけど、確かにそうだわ。
とりあえずalias NOP=':'として明示的に「何もしない」命令を作れる。
NOP() {:}より作るのが楽。

20 :
"NOP" 3文字
":" 1文字

21 :
>>20 ←こういう奴ってオブジェクト指向とか理解できなさそう。
「クラス作るとかコードが長くなるだけじゃん」とか言って。

22 :
個人的にはnopより:の方が直感的に理解できる

23 :
シェルスクリプトにオブジェクト指向とか言い出す方がTPOをわきまえないトンチンカンだけどな
シェルスプリプトもオブジェクト指向な言語(?)になればいいね。いや、C言語が未だに基盤としては唯一なのと同じで必要としてない、されてないか

24 :
>>23
PowerShell

25 :
素人の頓珍漢な質問だと思います。すいません。
$ echo "$$" | echo "$(cat), $$"
とすると、
n, n
といったように同一の番号が表示されますが、これは正当な挙動なのでしょうか。
$$には現行コマンドのPIDが入っているとマニュアルで読んだのですが、なぜ違うコマンドが同じPIDを持っているのでしょうか……。

26 :
なんのマニュアルか知らんけど違うよ。シェルのPID。なので同じなのは当然
ps
ってしてみりゃ、そのPIDがそのシェルのPIDってわかるっしょ
($$にも問題あって、より正確には$BASHPIDの方がだけど)

27 :
BASHPID

Expands to the process ID of the current bash process. This
differs from $$ under certain circumstances, such as subshells
that do not require bash to be re-initialized.

28 :
ディレクトリ→オブジェクト
実行ファイル→メソッド
テキストファイル→プロパティ
シンボリックリンク→継承、委譲

29 :
>>19
なにが楽なのかよくわからない

alias NOP=:
NOP() { :; }

30 :
>>23
シェルスクリプトはオブジェクト指向言語ではなくて
関数型言語だからなぁ

標準入力からの配列(複数の行)を入力して
フィルタかまして標準出力に出力する

この動きがメインとなってる

31 :
構造体も配列もない言語で、そんな複雑なデータ構造使うプログラム書いちゃいかん。
そういうのは他の言語に任せて、シェルスクリプトはその間のグルーに徹するようにしないと保守不能になる。

32 :
>>31
おじさん誰にレスしてんの?

33 :
>>31
配列あるよ?POSIXシェルにはないんだっけ?

34 :
少なくとも ksh で配列を使ったことはあるなあ。

35 :
>>33
POSIX仕様にある配列は $@ だけでしょ。

>>32
シェルでオブジェクト志向って言ってる人。
関数型風に書ける範囲内で関数型風に書くのは構わないと思う。
ただしBourneシェルを関数型言語だ等と主張したら、関数型言語の専門家に鼻で笑われるのは必至だな。

36 :
オブジェクト志向じゃない、オブジェクト指向だ、すまん。
なんで変換ミスって送った直後に気づくんだろうなあ。

37 :
オブジェクト指向云々は、多分、
名前重要って事を言いたかったんだと思うよ

38 :
たぶん>>21はオブジェクト指向の文脈で名前の付け方の重要性を知って
んで、その前提でオブジェクト指向って単語を出したんだろうけど
他の人はその前提を共有してないから、シェルでオブジェクト指向(笑)となって
挙句関数型だの尾ひれはひれに揚げ足取りするに至ったと憶測しました

39 :
納得した

40 :
>>37,38
それは知っていてのだったがな
そこここにはそれ流があると思うよ。LinuxとかBSDのソース見たらいまだにC流で短かったりするし。シェルスクリプトなら>>20っていう意見があってもいいだろう、そもそもいろいろ記号的なもんだから
なのにいきなりオブジェクト指向とか言い出し馬鹿にするのがTPOをわきまえない馬鹿だなっていう
シェルスクリプトがオブジェクト指向ならそれはそれでオブジェクト指向言語というかそれでのフレームワークなどでの名前付け方がってのはわかるけど

41 :
名前に拘るならNOPも略さずにNoOperationで

42 :
名前の長さとオブジェクト指向は独立した話だからなあ。
オブジェクト指向って言うからにはクラスか、あるいは型のプロトタイプか、どっちかは必須だろう。

43 :
>>38
あまりにも的確な分析にワロタ。まさか御本人様ですか?w
まあ文字だけのコミュニケーションだといろいろと伝わりにくいことが多いから、お互い気を付けないとね。

44 :
秒を分に変更するにはどんなコマンドを使ったらいいですか?
3000という文字があったとして、50にしたいです
date -d "3000" +"%M"だとダメでした

45 :
$(( 3000 / 60 ))
`expr 3000 / 60`
普通に算術で

46 :
date使ってもある意味無理やりなのは、
Linux
date -d "@3000" +"%M"
BSD
date -r 3000 +%M

>>44 は@が抜けてる

47 :
>>45
>>46
どうもありがとうございます!!

48 :
date -d "@3000" +"%M"

これだと、59分以上を表せなかったです。

49 :
まあ、算術コマンド使ったほうがいいわな。

50 :
>>49
そうだね。
$ echo 3000/60 |bc
50
$ echo 4000/60 |bc
66

51 :
だんだん数値が大きくなっていって閏年で悩むんだろうなあ

52 :
dc -e '3000 60 / p'

53 :
>>50
bcのマニュアル読もう!
$ printf '%.0f\n' "$(echo '4000/60' | bc -l)"
67

54 :
>>53
えっ、今回の要件は「商」を計算したいのだと思ったけど。
秒を分に変換するのに、勝手に四捨五入したらダメだろ

55 :
仕様が不明です

56 :
好きに解釈して脱線レスを繋げるスレ

57 :
すいません。
いま、誤ってログインシェルの設定ファイル(~/.bashrc)を空にしてしまいました。
しかし、まだログアウトしていないため、今稼動しているシェルはその設定を保持しています。
例えばエイリアスを知りたければ`alias`とやればいいはずですが、ほかにもシェル関数や環境変数なども読み込んでいます。
これらの値を今取得するにはどうすればいいですかね。

58 :
>>57
set
環境変数とシェル関数(posixモードの場合は変数のみ)

set -o
オプション設定のon/off状態

59 :
変数はsetとかprintenv
関数知らん

60 :
関数はtypeで返ってくるんじゃない?

61 :
関数はsetで出てこね?
printenvなんてあったのね。env使ってた。diffってみたが違いがわからんな。printenvの意味を後で調べてみよう

62 :
みなさまありがとうございます。
set -oおよびprintenv(これはenvと同じ出力でした。なんとなくprintenvを使いました)でかなりの部分を取り戻すことができました。
ただ、set -oで出力されるオプション設定の項目数が少ないように思うんだけども、どうなんですかね。
allexport off
braceexpand on
emacs off
errexit off
errtrace off
functrace off
hashall on
histexpand on
history on
ignoreeof off
interactive-comments on
keyword off
monitor on
noclobber off
noexec off
noglob off
nolog off
notify off
nounset off
onecmd off
physical off
pipefail off
posix off
privileged off
verbose off
vi on
xtrace off
なお、これらの内allexportやxtraceなどは設定した覚えがありません。システム設定(/etc/bash.bashrcあたり)でも設定されてません。不思議です……。
厚かましいのですが、できれば全てのオプションの状態を把握したいです。

63 :
すいません。shoptで行けました。ほとんど修復できました。感謝します。

64 :
>>63
っていうか、バックアップから.bashrcを拾って戻せるようにしておきなよ
言われなくても百も承知だろうけど、バックアップは大事だよ

65 :
>>64
ですよね……。
なぜかバックアップとシンボリックリンクを張るという馬鹿な真似をしてました。
それはもうバックアップとは言わねぇか。
次にパソコンを買った時はLVMやらで柔軟なパーティションを組んでやります

66 :
ドットファイルみたいにちょくちょく書き換えしててなくなると困るファイルは
RCSなんかで管理しとくといいんじゃない?

67 :
RCSとか石器時代かよ

68 :
SCCSですよね

69 :
>>66
ホームぶっ飛ばしたバカを見たことがある。 多分 rm -fr ./work を rm -fr . /work って打ったんだろう。

70 :
rm -rfは本当に怖いな

71 :
  ★★★共産●主義者とは言葉の通じない赤犬であり、決して人間と見なしてはならない!時たま本当らしいことを言うとしても、それはより大きな嘘を覆い隠す為の罠である。★★★

●  この掲示板(万有サロン)に優秀な書き込みをして、総額148万円の賞金をゲット●しよう!(*^^)v
  http://jbbs.livedoor.jp/study/37●29/ →リンクが不良なら、検索窓に入れる!●

72 :
/home直下にhoge00〜hoge99までの名前がついているディレクトリがあるとします
他にも/home直下にはディレクトリが存在します
ディレクトリ名を検索しながら、hoge00-hoge99の名前にマッチした複数のディレクトリの中の、ある特定のディレクトリに既存のファイルであるtestという名前のファイルをコピーしたいです
ある特定の、という意味は
・hoge○○ディレクトリ直下にtestというファイルがあったら→スルー
・testというファイル名のファイルがhoge○○直下になければ、既存のtestを該当hoge○○ディレクトリ直下にコピー

このようなシェルスクリプトを書きたいのですが教えてください

73 :
forで回してifで分岐してcpするだけだと思うけど、
自分ではどこまでできてんの?

74 :
>>73
ifとcpは使うんだろうなと思っていました
forもやはり必要そうですね、、

75 :
それを使わずにどうやろうというんだ
要するに連番ディレクトリに全てtestファイルがあるようにしたい、ただし既存のtestファイルは上書きしない、でいいのか

76 :
>>75
全くおっしゃる通りです

77 :
filehoge="test"
[ ! -f "$filehoge" ] exit 1
seq -f 'hoge%02g' 1 99 | while read hogedir
do
[ -d "$hogedir" ] && [ ! -f "$hogedir/$filehoge" ] && { cp "$filehoge" "$hogedir"; echo "copied into $hogedir"; }
done

78 :
seq -f 'hoge%02g' 0 99
の間違い。00からなので

79 :
>>77
>>78
もの凄く高度ですね…
自分には理解できるかわかりませんがじっくり読ませてください
ありがとうございます

80 :
お題として遊ぶなら、findしてexec内でやっつけるとかかな

81 :
自分はfindを使うやり方を考えていました

82 :
findは存在を確認するのは楽だろうけど、存在しないことを確認するのは面倒じゃない?

83 :
>>77
[ ! -f "$filehoge" ] && exit 1
の間違いもあった。&&抜けてた、すまん。

>>79
ん?まあ、for(forはアレでアレの回避があったような気がするがすぐ忘れる。 | while read hoge しか使わないので) と if(明示するだけだけど)で書けばいいよ

...
for hogedir in $(seq -f 'hoge%02g' 1 99)
...
if [ -d "$hogedir" ] && [ ! -f "$hogedir/$filehoge" ]; then
cp "$filehoge" "$hogedir"
...
fi

84 :
あー、" で括るだけか。アレの場合も
for hogedir in "$(seq -f 'hoge%02g' 1 99)"
が、よりかな

85 :
やっぱりダメなのかな??
touch 'hoge 01';touch 'hoge$02'
for name in "$(/bin/ls -1)"
/bin/ls -1 | while read name
やっぱforはメンドクサイから、安心簡単な while でいいやっ

86 :
>>82
考えるのに役立つアドバイスありがとうございます

>>83>>84>>85
更新してくださりありがとうございますm(_ _)m
読ませていただきます

87 :
初心者ですが面白くなってきました
今日中に仕上げられるよう頑張ります

88 :
楽しめるうちにたくさん学習しておくんだぞ

89 :
>>82
それはexecの中でやればいいんじゃ

お題とは別に、存在しないことの確認だけだったら、
検索条件に入れればいいだけだし

90 :
質問です。
シェルスクリプトファイルを実行する方法として
1. 利用者に応じた実行権限を賦与する
  $ chmod +x scriptfile.sh
  $ ./scriptfile.sh
2. sh(1)コマンドの引数として実行する
  $ sh scriptfile.sh
という方法がありますが,どちらがより良いか教えてください(というかスクリプトの実行結果自体にはたして違いはあるのでしょうか)。
今まで一つ目の方法しか知りませんでしたが,もし二つ目になんら欠点がなければよりコマンドの数が少ない
(極端に言えばchmod(1)コマンドがなくてもできる)後者の方法を使っていきたいです。
どうかよろしくおねがいします。

91 :
psで見てみ。1 でも、そのシェルスクリプトファイルのシバン(*1)で指定したインタプリタ(シェル)を、引数としてそのシェルスクリプトファイルをで起動してるから

1はコマンド、2はスクリプトファイルっていう違い。/usr/binなどの中のコマンドでも実態はシェルスクリプトやPerlスクリプト等なのがあるけど、そんなの気にしてない気づいてなくコマンドとして使ってたりするだろ?
まあ、コマンドとして必要じゃない(コマンドの数が少ないって意味がわからんが一時的とかか?)んだったら、別にスクリプトファイルとしてで全然普通

1) お約束事項のような
#!/bin/sh
もう俺は気にしてなくて
#!/bin/bash
だけど

92 :
使い捨てか頻繁に使うか

93 :
>>82
hogefile="test"
find . -maxdepth 1 -type d -name 'hoge[0-9][0-9]' -exec bash -c "test -f {}/$hogefile || cp $hogefile {}" \;

こんな感じとか?俺は、俺も、そうはしないけど。-exec は使ったことないのでどこまでできるのかよくわからんな。なのでbashスクリプトにした/逃げた

94 :
>>91
ありがとうございます。
ps(1)コマンドで確認したところ,たしかに両方ともにシェルが始めに起動されていました。
(素朴な疑問なんですが,PIDが連続しているのは偶然ですか? 原理的に必然ですか?)
1の方法だと一見シェルは起動されていないように見えるけれども,シバンに書かれたシェルがまず起動するということですね。
ということは全く違いはないという理解でよいでしょうか。
>>92
なるほど。1の方法は永続的,2の方法は試験目的で一時的に作ったファイルなどに対し用いるということですね。

95 :
シェルプロセスが勝手に起動されるか明示的に起動するかで、なんかあった(rcやprofileを読まないとか起動時の環境設定の動作)が今回のようなのは関係ないだろう、気にすんなw
PIDはだいたい普通にインクリメント。なにかプロセスが起動するごとにそれの新しいPIDはインクリメントされた値かな

96 :
OSによってはセキュリティ的な理由でPIDをある程度ランダムに割り当てるので連続にはならない。
BSD系はどれもデフォルトだとランダムじゃないかな。

97 :
PIDが若いから特権があるわけでもないしPIDが推測しやすいからっていうセキュリティ懸念ってなんだろ?

98 :
cat >/tmp/tmpfile.$$
みたいに手抜きな一時ファイル作成してると
シンボリックリンク攻撃くらうからそのリスクを減らせたりする。
ちゃんと攻撃避ける正しい書き方してれば関係ない話だけど、
世の中にテキトーなスクリプトは尽きないから。

99 :
なるほど。OSのセキュリティではなくPIDを利用したナニかに対するか

100 :
ん?PIDを知ることができる(当然知ることは普通にできる)ってとこがキモで推測しやすいのとは別のような。まあ、いいや、ナニかあるなってことで


100〜のスレッドの続きを読む
【情報】FreeBSD で動く USB デバイス【キボンヌ】
UNIXとオナニー
UNIX総合談笑スレ
OpenLDAP
UNIXプログラマの為のWindows入門
ファイルの読み書き速度はLinux>FreeBSD?
IMEなんとかしろ
FreeBSDを語れ Part47
シェルスクリプト総合 その23
UNIXプログラマの為のWindows入門
--------------------
ピアノと脳
もうすぐ30歳。小学校教諭になりたい!
【消費税増税】高速道路も消費税率引き上げで値上げへ
アベノミクス失敗でパンダノミクス
【B.LEAGUE】茨城ロボッツ3【水戸】
【映画】注目映画紹介:「空母いぶき」西島秀俊ら豪華俳優陣による重厚な人間ドラマ かわぐちかいじ作品初の実写映画
アベノミクス不況 食費も節約志向
【PSO2】TGSで驚きのコラボ情報、来る
ファッションコーディネートアプリ “WEAR” 総合43
【Kis-My-Ft2】山岡夕夏がエッチし放題【マネの妻】
Sacred2 セイクリッド2 No.11
村人隔離スレ
すすり食いする人って気色悪い12
今思っていることをストレートに書き込むスレ part307
【Android版】 三国志乱舞 ★17【スクエ】【マイネット】
女の男社会侵略が少子化を加速した
【AT】APoroo【取引所】
【ソフトメタルヴァンパイア】遠藤浩輝総合48【オールラウンダー廻】
PanasonicのヘッドホンスレPart3
黒人たちがトランスジェンダー差別に激怒、全米で抗議集会 ニューヨーク市には数千人が集合
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼