シェルスクリプト総合 その22
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2013/11/01(金) 07:58:50.52□お約束
・特記なき場合は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.opensolaris.org/source/xref/onnv/onnv-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に逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その21
http://toro.2ch.net/test/read.cgi/unix/1352973453/
0437名無しさん@お腹いっぱい。
2014/03/03(月) 12:47:23.09perl以外の選択肢は増えている。
0438名無しさん@お腹いっぱい。
2014/03/03(月) 12:50:06.730439名無しさん@お腹いっぱい。
2014/03/03(月) 13:07:26.50基本だけ知ってれば、いちいち調べなくても書けるのがいい
0440名無しさん@お腹いっぱい。
2014/03/03(月) 13:35:31.63NetBSDにもperlはない。
luaはあるが。
luaなのは、組み込み言語用途での実績かららしい。
0441名無しさん@お腹いっぱい。
2014/03/03(月) 17:19:30.99その記事だとカーネルビルドに必要なくなっただけでデフォルトインストールだと書かれてるけど…
0442名無しさん@お腹いっぱい。
2014/03/03(月) 17:20:09.85lrwx------ 1 root wheel 4 Feb 21 19:21 /dev/lua -> lua0
crw-rw-r-- 1 root wheel 209, 0 Feb 21 19:21 /dev/lua0
0443名無しさん@お腹いっぱい。
2014/03/03(月) 22:49:22.360444名無しさん@お腹いっぱい。
2014/03/03(月) 22:57:48.86シェルスクリプトと言い張る。
#!/bin/sh
python -c hogehoge...
EOF
0445名無しさん@お腹いっぱい。
2014/03/04(火) 00:24:58.61pythonなら
#!/bin/sh
python <<EOF
hogehogehoge
EOF
にしないとワンライナーで書くことになって死ぬ
0446名無しさん@お腹いっぱい。
2014/03/04(火) 05:16:11.99豆な。
0447名無しさん@お腹いっぱい。
2014/03/04(火) 08:37:46.650448名無しさん@お腹いっぱい。
2014/03/04(火) 09:10:08.090449名無しさん@お腹いっぱい。
2014/03/04(火) 11:04:27.79技術系スレとはいえ 2ch だもんな。
どっちが大勢?
0450名無しさん@お腹いっぱい。
2014/03/04(火) 11:20:14.560451名無しさん@お腹いっぱい。
2014/03/04(火) 11:39:52.720452名無しさん@お腹いっぱい。
2014/03/05(水) 06:45:09.19社史編纂室に異動させるわ
0453名無しさん@お腹いっぱい。
2014/03/05(水) 06:52:27.270454名無しさん@お腹いっぱい。
2014/03/05(水) 08:13:05.63冷やすとリングも添付ファイル作るから解決にならんよ。パイプで書き換えること。
0455名無しさん@お腹いっぱい。
2014/03/06(木) 00:46:35.73set usage="usage : `basename $0` -hoge [A|B|C]"
[]でエラーになります。
0456名無しさん@お腹いっぱい。
2014/03/06(木) 02:36:44.78>>1
> ・csh/tcshのシェルスクリプトは推奨されません。
> (理由は「csh-whynot」でググれ)
ログインシェルとして使うのはともかく、スクリプトにcsh系を使うべきではない
0457名無しさん@お腹いっぱい。
2014/03/06(木) 06:26:36.56仕事なくても養ってくれるなんて、今どきあり得ない好待遇じゃないですか。
左遷される前にクビが飛ぶんですから。
0458名無しさん@お腹いっぱい。
2014/03/06(木) 06:29:01.280459名無しさん@お腹いっぱい。
2014/03/06(木) 07:47:00.960460名無しさん@お腹いっぱい。
2014/03/06(木) 08:22:34.96使ってないけど、
set usage="usage : `basename $0` -hoge "'[A|B|C]'
じゃダメなの?
0461名無しさん@お腹いっぱい。
2014/03/09(日) 03:02:15.61対話操作できるようにできますか?
bashをヒアドキュメントを利用して起動してもbashが終了してしまい-cオプションでも同じことが起きます
-o ignoreeofでもダメでした
0462名無しさん@お腹いっぱい。
2014/03/09(日) 09:24:16.63環境変数だけなら env PS1="..." PS2="..." /bin/bash でいける。
別途ファイル用意していいなら bash --rcfile ファイル名 で .bashrc のかわりのファイルを指定するか。
(ファイルの先頭に . ${HOME}/.bashrc 書いておいて、追記分を2行目以降に記載)
0463名無しさん@お腹いっぱい。
2014/03/09(日) 10:05:44.590464名無しさん@お腹いっぱい。
2014/03/09(日) 10:10:03.690465名無しさん@お腹いっぱい。
2014/03/09(日) 23:13:53.66手でやってるのかな?
0466名無しさん@お腹いっぱい。
2014/03/10(月) 06:29:01.50人工知能はいまだ自然言語の分解も怪しいってのに
質問と回答とその他が区別できる程の自然言語解釈とか無理だと思う
0467名無しさん@お腹いっぱい。
2014/03/10(月) 06:48:59.220468名無しさん@お腹いっぱい。
2014/03/10(月) 09:20:03.930469名無しさん@お腹いっぱい。
2014/03/10(月) 13:43:45.94PS2ってなんだっけか
0470名無しさん@お腹いっぱい。
2014/03/10(月) 13:45:31.000471名無しさん@お腹いっぱい。
2014/03/10(月) 13:47:51.38プロンプトを改造したいんだけど、うまくいきません。
bashで、プログラム実行直前の時刻を取得する方法ってあります?
bashで無理ならzshとかいうやつでもいいです。
0472名無しさん@お腹いっぱい。
2014/03/10(月) 13:48:41.840473名無しさん@お腹いっぱい。
2014/03/10(月) 13:50:14.230474名無しさん@お腹いっぱい。
2014/03/10(月) 14:42:21.01あるよ
0475名無しさん@お腹いっぱい。
2014/03/10(月) 14:43:20.910476名無しさん@お腹いっぱい。
2014/03/10(月) 21:50:55.09あたり
0477名無しさん@お腹いっぱい。
2014/03/11(火) 10:38:49.35どうやって実現すればよいですか?
0478名無しさん@お腹いっぱい。
2014/03/11(火) 10:56:29.860479名無しさん@お腹いっぱい。
2014/03/11(火) 13:17:02.19HISTTIMEFORMAT環境変数セットして
0480名無しさん@お腹いっぱい。
2014/03/11(火) 14:36:12.29プロンプト表示時点の時刻じゃなくて、
コマンド実行時にそのコマンドをタイプした前の行のプロンプトに時刻を入れる
というところがポイントな。
0481名無しさん@お腹いっぱい。
2014/03/11(火) 14:45:31.55コマンドをタイプしたらその行プロンプトのの時計が止まってコマンド起動時刻を示す、
というのがいいな。
0482名無しさん@お腹いっぱい。
2014/03/11(火) 15:11:12.450483名無しさん@お腹いっぱい。
2014/03/11(火) 15:48:25.57HISTTIMEFORMATセットすると、
HISTCONTROL=ignoreboth が無効になる
当たり前なんだろうけどちょっとショック受けた
0484名無しさん@お腹いっぱい。
2014/03/11(火) 16:31:57.440485名無しさん@お腹いっぱい。
2014/03/11(火) 16:54:41.94シェル側はどうこうできない。
呼ばれるコマンドが実行される直前に
シェル側で時刻を出す必要がある。
0486名無しさん@お腹いっぱい。
2014/03/11(火) 18:11:36.64違わない
実行直前の時刻とは、開始時刻のことである
必要ならば図解しようか?
0487名無しさん@お腹いっぱい。
2014/03/11(火) 18:13:28.44図解よろしく。
0488名無しさん@お腹いっぱい。
2014/03/12(水) 08:46:30.76bashでprecmdをググったらこんなのが引っかかった ttp://glyf.livejournal.com/63106.html
0489名無しさん@お腹いっぱい。
2014/03/12(水) 23:40:38.94expectコマンドはインストールしない方法を考えています。
echo -e "password\n" | ssh -t -t root@hoge.hoge
上のスクリプトだとプロンプトが出てダメでした。よろしくお願いいたします。
0490名無しさん@お腹いっぱい。
2014/03/13(木) 00:06:43.46失礼な話だが、釣り/荒し臭い質問だな。
適当に回答させて、いつものお決まりの文を書き込むのかな?
0491名無しさん@お腹いっぱい。
2014/03/13(木) 00:10:32.95expectが何をやってるか知っていればそんなマヌケな質問は出てこない。
回答:
expect入れたくなきゃexpectと同じ働きのプログラムを作る
0492名無しさん@お腹いっぱい。
2014/03/13(木) 00:12:25.76何故パスフレーズなし秘密鍵ではだめなの?
0493名無しさん@お腹いっぱい。
2014/03/13(木) 00:17:52.08Dockerのコンテナにsshでログインしようとしているのですが、秘密鍵を指定しても読み込んでくれずパスワード入力になりました。
それで秘密鍵なしで頑張ろうと試行錯誤している次第です。
0494名無しさん@お腹いっぱい。
2014/03/13(木) 00:18:14.48ぼくのかんがえたさいきょうのパスワードくらっかーで、にっくきあいつのホストにろぐいんしてやるんだー。
ってことだろ
0495名無しさん@お腹いっぱい。
2014/03/13(木) 00:19:50.07公開鍵方式で認証できるように試行錯誤しろよ。
0496名無しさん@お腹いっぱい。
2014/03/13(木) 00:34:58.01$HOME/.ssh/authorized_keysないし、その祖先ディレクトリの
どこかが、グループかotherに対して書き込みを許してるってのが
チョーありがち。
てゆーか、まずログを確認すべきだね。
CentOSなら/var/log/secureとか。
0497名無しさん@お腹いっぱい。
2014/03/13(木) 00:54:40.58$HOME/.sshフォルダがまるごと消えていたのが原因だったようです。。
きちんと確認しないといけないですね。ありがとうございました。
0498名無しさん@お腹いっぱい。
2014/03/13(木) 01:43:17.070499名無しさん@お腹いっぱい。
2014/03/13(木) 10:38:52.370500名無しさん@お腹いっぱい。
2014/03/13(木) 19:05:06.070501名無しさん@お腹いっぱい。
2014/03/14(金) 03:42:52.41答えてるのも社史編纂室のおじちゃん達というオチか
0502名無しさん@お腹いっぱい。
2014/03/14(金) 09:07:38.64糞質問する奴ともども氏ねや
0503名無しさん@お腹いっぱい。
2014/03/14(金) 09:43:44.60bashで無理ならzshとかいうやつでもいいです。
0504名無しさん@お腹いっぱい。
2014/03/14(金) 10:14:10.84社史編纂質
すみませんが詳しい方だけ答えてうんたら
これらギャグのつもりなんだろうが
面白くないし、寒いし、うざい
「ギャグは繰り返し」を勘違いしてる、寒くてうざいもんは寒くてうざい
0505名無しさん@お腹いっぱい。
2014/03/14(金) 10:23:30.00「ウざがられるためにやってるんですう」とか
小学生みたいにいってくるからヤメロ
0506名無しさん@お腹いっぱい。
2014/03/14(金) 11:05:31.46カレントってなに? 電流?
0507名無しさん@お腹いっぱい。
2014/03/14(金) 11:37:04.63DIR=`pwd` とかそういう話かな。
0508名無しさん@お腹いっぱい。
2014/03/14(金) 11:38:08.740509名無しさん@お腹いっぱい。
2014/03/14(金) 11:48:40.69> これらギャグのつもりなんだろうが
ギャグじゃなくて回答する人を弄ぶのが目的の荒しだと思うが。
> 社史編纂質
> すみませんが詳しい方だけ答えてうんたら
俺的には
「人を馬鹿にする事ばかりの虚栄心君」
もかな。
0510名無しさん@お腹いっぱい。
2014/03/14(金) 11:56:21.660511名無しさん@お腹いっぱい。
2014/03/14(金) 12:07:14.51それを理解できたら正気ではいられなくなる。
0512名無しさん@お腹いっぱい。
2014/03/14(金) 12:16:23.40書きかたが悪いせいで、そいつ自身バカに見える
0513名無しさん@お腹いっぱい。
2014/03/14(金) 12:17:37.85この手のは完全スルーが一番
0514名無しさん@お腹いっぱい。
2014/03/14(金) 15:39:00.00sleep入れればおk
(sleep 3; echo -e "password\n") | ssh -t -t root@hoge.hoge
こんな感じな
0515名無しさん@お腹いっぱい。
2014/03/14(金) 15:46:13.800516名無しさん@お腹いっぱい。
2014/03/14(金) 16:18:08.600517名無しさん@お腹いっぱい。
2014/03/14(金) 21:37:10.13昔から言うよね バカのひとつ覚えってw
0518名無しさん@お腹いっぱい。
2014/03/15(土) 17:14:02.96シェル実行ファイル内に、
TEMP=`コマンド結果`
の変数があって、外部ファイル(SQL文)内に同じ変数
${TEMP}
を記述して、外部ファイルを読み込ませてSQLを実行させたいのですが、
変数に値が入るような書き方が分かりませぬ。
0519名無しさん@お腹いっぱい。
2014/03/15(土) 17:19:10.470520名無しさん@お腹いっぱい。
2014/03/15(土) 17:20:44.24その後どうすか。
0521名無しさん@お腹いっぱい。
2014/03/15(土) 17:36:44.02予告しておこう
お前はSQLインジェクションを喰って死ぬほど後悔する。
0522名無しさん@お腹いっぱい。
2014/03/15(土) 23:40:58.59やはり置換が必要なんですかね。
>>521
ヒアドキュメントで動作することは確認できたのですが、
外部ファイルに持たせる処理をスマートにやってみたかっただけです。
セキュリティ的にまずいんですかね このやり方。
0523名無しさん@お腹いっぱい。
2014/03/16(日) 00:57:51.00回答でサニタイズが言及されていない時点で、(やり方もだが)
あなたの知識がセキュリティ的にまずいと思うわ。
SQLインジェクションは思いつきにくい方法でデータぶっこぬかれたり不正操作されるって
パターンなんで、どういう攻撃方法があるかを人とおり勉強することをオヌヌメする。
0524名無しさん@お腹いっぱい。
2014/03/16(日) 03:25:40.44処理しようというのが間違い
0525名無しさん@お腹いっぱい。
2014/03/16(日) 08:52:20.290526名無しさん@お腹いっぱい。
2014/03/16(日) 09:08:18.94対策本への)言いがかりなので、適切な文脈で使うのは全く問題ない。
0527名無しさん@お腹いっぱい。
2014/03/16(日) 15:41:16.64サニタイズという単語が適切なケースなんてまず無いってのが根本にある。
劣化したエスケープにすぎないサニタイズで満足する考え方自体問題だし、
サニタイズなんて言葉使う考え方してるとそのうちエスケープ漏れで死ぬよ。
エスケープとサニタイズの関係はバグとセキュリティホールの関係に置き換えられる。
セキュリティホールとして悪用可能なバグじゃなくてもバグを肯定するのは駄目だろう。
0528名無しさん@お腹いっぱい。
2014/03/16(日) 16:16:50.80だってかまわない。
その場合もエスケープか? 確かにエスケープだが意味が全然違う。w
ところで、パブリックアクセス可能なdbを作成する際にセンシティブな情報や
個人情報を取り除く事もサニタイズと言うのだが、これも「サニタイズ言うな
キャンペーン」に引っかかるのかね? どうやってエスケープするんだろう。w
0529名無しさん@お腹いっぱい。
2014/03/16(日) 16:59:02.560530名無しさん@お腹いっぱい。
2014/03/16(日) 17:17:31.70「センシティブな文字列」というものをそもそも作り出さないのが
サニタイズ言うな運動の肝なんよ
まあシェルスクリプトだとなかなか難しい話なんだけど、
Cとかでたとえるなら
system使うとコマンドラインインジェクションの危険あるけど
forkしてexecなら原理的にインジェクションは無いでしょ?
そういう積み重ねのことね。
0531名無しさん@お腹いっぱい。
2014/03/16(日) 17:26:45.65DBユーザの権限で制限するのあんまやんないよなぁ。
行ごとの権限ができないのはともかく。
0532名無しさん@お腹いっぱい。
2014/03/16(日) 18:01:23.02エラー終了はサニタイズしてないし、後者は単なるNGワードだろが…
システム的な意味でなら>>530だから論外だし
>>530
シェルスクリプトでエスケープとか考えたくねーわな…
>>531
たまには聞くけど ttp://blog.kazuhooku.com/2013/11/blog-post.html
よく聞く方法ではないね。レンタルサーバで1アカウントしか使えない場合を想定してるとか?
0533名無しさん@お腹いっぱい。
2014/03/16(日) 18:59:34.85>>528の後半部分の「センシティブな文字列」とはクレジット番号だったり
するわけだが
> 「センシティブな文字列」というものをそもそも作り出さないのが
> サニタイズ言うな運動の肝なんよ
クレジット番号を作り出さないとか、全く意味不明
>>532
入力された文字をサニタイズしてのではなく、入力されたデータ全部を
サニタイズしたと言っていい
0534名無しさん@お腹いっぱい。
2014/03/16(日) 19:06:36.890535名無しさん@お腹いっぱい。
2014/03/16(日) 19:10:20.600536名無しさん@お腹いっぱい。
2014/03/16(日) 20:38:59.46入力されたクレジット番号を文字列に埋め込むときに
無検査で埋め込むなってことでしょ
そのつっこみの方が意味不明
■ このスレッドは過去ログ倉庫に格納されています