シェルブリットはいいからゴチックメイドはどうなったんだよ
□関連書籍と関連リンク:
FreeBSD Hypertext Man Pages
http://www.freebsd.org/cgi/man.cgi Linux JF (Japanese FAQ) Project.
http://www.linux.or.jp/JF/ Unix Programming Frequently Asked Questions 日本語訳
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_toc.html UNIXプログラミング環境
http://www.amazon.co.jp/exec/obidos/ASIN/4871483517/ □人間初心者へのお願い:
・このスレはシェルスクリプトについてのスレです。
シェルの対話的な利用についての話やスクリプトと関係ないコマンドの
使い方の質問などはスレ違いなので無用に願います。
□シェルスクリプトでよく使うコマンド:
制御・条件判定系: [,test,expr,true,false,yes,getopts
テキスト処理系: cat,awk,sed,tr,sort,uniq,grep,wc,head,tail,cut,paste,comm,join
ファイル検索系: find
(スペースなどを含むファイル名を正しく処理するため、
findは -exec command {} + を推奨。
他に -print0、xargsは -0オプションという方法もあるがSolaris非対応)
ディレクトリ系: basename,dirname
出力系: echo,printf
対話コマンド制御系: expect
http/ftpの処理自動化: wget,curl
以下の結果を出力するシェルを,bashスクリプトで書け. (基本仕様) ・コマンドとして実行できる.(シェルコマンドである.) ・ユーザーが10000以上99999以下の5桁の数字を入力する. ・その数字を7で割って1余り,かつ13で割って2余った場合は Daikichiと表示する. ・それ以外で,13で割って2余った場合は Chuukichiと表示する. ・それ以外で,7で割って1余った場合は Shoukichiと表示する. ・それ以外の場合は Hazureと表示する. ・入力した文字が10000以上99999以下の数字以外の場合はエラーメッセージを表示する. ・できる人は,コマンドライン引数でDaikichiなどの文字を変更できるようにする. (ポイント) ☆シェルコマンドにするには,スクリプトの最初に(#!で始まる)おまじないを書く. ☆標準入力から文字列を入力するには read を用いる. ☆コマンドラインの引数は,$@に格納されている.(その要素は $1 $2 ...) ☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.) 誰かわかるひとお願いします
>>7 csh じゃないんだなw
シェルスクリプトの事をシェルと書くと怒る人が居るので気をつけた方が良いぜ。
↓これをファイルに保存して、実行するとお望みのスクリプトが出力される筈だ。
#!/bin/zsh
echo '#!/bin/bash
while read i
do
case ${i} in'
for i in {10000..99999};
do echo -n "${i}) ";
if [ 2 -eq `echo ${i} % 13 | bc` -a 1 -eq `echo ${i} % 7 | bc` ];
then echo "echo Daikichi;;"; elif [ 2 -eq `echo ${i} % 13 | bc` ];
then echo "echo Chuukichi;;"; elif [ 1 -eq `echo ${i} % 7 | bc` ];
then echo "echo Shoukichi;;"; else echo "echo Hazure;;"; fi; done
echo 'esac
done'
>>8 行数が10万行近くあって、レポート用紙が何枚あっても足りません><
#!/bin/bash read a if [[ "$a" -lt 10000 || "$a" -gt 99999 ]] then echo 'Error' exit fi x=$((a % 7)) case "$x" in 1) x=$((a % 13)) if [ "$x" -eq 2 ] then echo 'Daikichi' else echo 'Shoukichi' fi ;; *) x=$((a % 13)) if [ "$x" -eq 2 ] then echo 'Chuukichi' else echo 'Hazure' fi ;; esac
>>12 read a のところで aを入力すると、誤動作するようですが・・
# read a の次にこれを追加すれば解決。 echo "$a" | grep '^[[:digit:]]....$' >/dev/null 2>&1 if [ $? -ne 0 ] then echo 'Error' exit 1 fi
# 失礼。09999とかの判定を忘れてた。 # grepのパターンはこっちのほうが良い。 echo "$a" | grep '^[[^0][:digit:]]....$' >/dev/null 2>&1 if [ "$?" -ne 0 ] then echo 'Error' exit 1 fi
>>12 jkl.sh: Command not found.
ワザワザbashをインスコしなきゃ、UNIXじゃ使えないじゃん。
今時の「UNIX」はbashが標準で付いてるから無問題
セツ子、それUNIXちゃう。犬糞や。
いや、Linuxじゃなくて、今時のUNIXはbashが標準で付いてるという話をしてるんだが
AIXとかHP-UXってbash標準なの?
>>19 の言う今時のUNIXはやっぱLinuxなんだよな
だれもLinuxの話なんかしてないよ で、ちょっと前だとbashはLinuxのものとして叩けたけど、 今はUNIXでもbashが標準になっちゃったから、その線では叩けなくなったんだよ。
>>22 だからそのUNIXって何だよ(w
ぱちょこんウニックスか?
なんとかベーエスデーか?
ここで華麗に PDP7 と 7th edition が登場
OS Xならついてくるが標準でbashが起動するかどうか忘れた
26 :
名無しさん@お腹いっぱい。 :2010/02/24(水) 00:27:15
AIX 5Lまでは、kshが標準 bashはオプション 6.1は知らん
>>20 無いよ。
>>23 *BSDにも無い。
Mac OS Xは全然UNIXとは程遠い。
kernelにFreeBSDが使われてるってだけ。
Solarisでも/opt扱いだったな。
>Mac OS Xは全然UNIXとは程遠い。 >kernelにFreeBSDが使われてるってだけ。 ??????
30 :
名無しさん@お腹いっぱい。 :2010/02/24(水) 02:30:29
ちょっと釣り針がでか過ぎるんじゃないか?
へえ釣りなんだw
あぁ、伝説のUNI+よ。。。
>>28 おいおい、*BSDはUNIXじゃないよw
あと、今のSolarisではbashは必須扱い。
>>28 Solarisのbashは、/optじゃなくて、/usr/bin/bash。
しかも、symlinkじゃなくて、/usr/bin/bashにバイナリ本体がある。
SUNWbashに入ってる。
ここ何のスレ?
まとめると
>>19 の
「今時のUNIX」はLinuxと決定されました。
>>36 LinuxはUNIXじゃないよ。*BSDもUNIXじゃないよ。
「今時のUNIX」は主にSolarisとかのこと。
Solaris10 -> bash標準
OpenSolaris -> bash必須
38 :
名無しさん@お腹いっぱい。 :2010/02/24(水) 09:50:50
>>28 > Mac OS Xは全然UNIXとは程遠い。
UNIX認証を得てるので名はUNIX。
ユーザランドはFreeBSDベースに作られたDarwinなので、実も伝統的なu**x
> kernelにFreeBSDが使われてるってだけ。
kernelはMach
>>37 >LinuxはUNIXじゃないよ。
分かった上で言ってるんだと思うよ。
>>37 主にだったら他に何があるの?
主も糞もSolarisのみの話なら、今時のUNIXという
括りは間違ってるんだが
>>37 OpenSolarisもUNIXじゃないよ。
なんとかLinuxを正当化しようと今時のUNIX なんて書いてみたものの、結局Solarisしかなくて やっぱり今時のUNIX=Linuxに戻ってしまうという循環
だから、LinuxはUNIXじゃないって、、
>>24 第7版はPDP11です、とセルフつっこみ
>>12 って、bash独自なところは一つもないじゃん。
/bin/shに変更しても「今時のUNIX」ならすべて動く。
それはそうと、
>>12 は無駄が多い記述だな、もうちょっと簡単に書ける。
>>44 うちの freebsd (/bin/sh = ash) と debian (/bin/sh = dash) では動きませんでした。
まあ、どっちも今どきの UNIX じゃないけど。
# ksh で拡張された機能が必要
>>45 FreeBSDはUNIXじゃありません。
今、話をしてるのは「UNIX」だけです。
OpenSolarisとか言ってるからUNIXじゃなくてもいいんだろ
>>46 おまえのいう「UNIX」の定義を述べよ。
UNIXかUNIXじゃないかってそんなに大事なことなの?
OS XもUNIXでつ
>>49 今時のUNIXと言い放ったバカと
それを受けとめる人間には重要
なんで重要なんだろう。
そんなに疑問に思うことなの?
うん。
改めて定義を聞かれて慌てているの図
とりあえずわからないから UNIXの定義は来世紀への課題と致します
57 :
名無しさん@お腹いっぱい。 :2010/02/25(木) 20:24:31
以下の結果を出力するスクリプトを,UNIXシェルで書け. (基本仕様) ・コマンドとして実行できる.(UNIXシェルである.) ・コマンドラインの第1引数で数字を指定する. ・第1引数が数字以外だった場合はエラーメッセージを表示する. ・第1引数の数字以下の自然数のうち,素数をすべて見つけてリスト表示する. ・すべてUNIXシェル内部で処理し,外部コマンドは呼び出さないこと. (ポイント) ☆UNIXシェルにするには,ファイルの最初に #!/bin/bashというおまじないを書く. ☆コマンドラインの第1引数は,$1に格納されている. ☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.) 誰かわかるひとお願いします
オウ、デジャブー
#!/bin/sh /usr/games/primes 1 "$1"
>>57 『UNIXシェルである』という表現は有効なの?
前スレでマルチしてた人でしょ。 相手しちゃだめだよ。
>>59 >>57 >・すべてUNIXシェル内部で処理し,外部コマンドは呼び出さないこと.
>>57 その頭の悪そうな問題書く人は駆け出しの厨房?
もし師と仰いでるなら、即刻師匠を変えた方が良い
# bashでやる意味のない問題だと思うが。 # 問題自体は難しくないのだが・・・ #!/bin/bash echo "$1" | grep '^[[:digit:]][[:digit:]]*$' >/dev/null 2>&1 if [[ "$?" -ne 0 || "$1" -lt 2 ]] then echo 'Error' exit 1 fi for ((i=2;i<="$1";i++)) { if [ $((i % 2)) -eq 0 ] then echo "$i" fi }
66 :
64 :2010/02/26(金) 20:55:01
失礼、書きかけのやつをカキコしちまった。 粗相。
「すべてUNIXシェル内部で処理し,..」だから、 grepも使っちゃ駄目だそうですよ
ってゆうか、微妙に長すぎてカキコめない・・・ 早い話、素数かどうかわかれば良いだけなら 判定対象の数値をそれより小さい数値全てで割り算してみればいいだけ。 ようするにループで回せばいいだけ。
肝要部分だけ書くと、 ↓だろ。全然長くないよ。 #!/bin/bash for ((i = 2; i <= $1; i++)) { for ((j = 2; j < i; j++)) { if ((i % j == 0)); then continue 2 fi } echo $i }
70 :
名無しさん@お腹いっぱい。 :2010/02/26(金) 21:18:53
以下の結果を出力するスクリプトを,UNIXシェルで書け. (基本仕様) ・コマンドとして実行できる.(UNIXシェルである.) ・コマンドラインの第1引数で人間の手番(○側か×側か)を指定する. ・人間とコンピュータが対戦するようにする. ・3x3マスのマルバツゲームのボードを作成する. ・○側と×側が交互に2次元座標上の位置を入力する. ・入力後、毎回ボードを表示する. ・たて、よこ、斜めのいずれかに○か×が3つ並んだ時点でプログラムを終了する. ・すべてUNIXシェル内部で処理し,外部コマンドは呼び出さないこと. (ポイント) ☆UNIXシェルにするには,ファイルの最初に #!/bin/bashというおまじないを書く. ☆コマンドラインの第1引数は,$1に格納されている. ☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.) 誰かわかるひとお願いします
すっかり糞スレになったな
72 :
名無しさん@お腹いっぱい。 :2010/02/26(金) 22:48:25
以下の結果を出力するスクリプトを,UNIXシェルで書け. (基本仕様) ・コマンドとして実行できる.(UNIXシェルである.) ・主人公、妹1名、両親、自分の友人数名(うち最低1名は女性、半数以上は男性とする)、妹の友人(女性)数名が登場する. ・主人公、妹、自分の友人、妹の友人はいずれも生徒もしくは学生とする. ・両親のうち、父は総合商社勤務のサラリーマン、母は専業主婦とする. ・主人公の言動やイベントの発生にともない、各キャラのパラメータを変化させる. ・病弱な妹を思いやる兄と妹の交流を中心に、他の登場人物との友情や恋愛を描写する. ・エンディングは妹、もしくは妹の友人のいずれかと深い恋愛関係になるか、誰とも親密になれないバッドエンディングになるようにする. ・妹と恋愛関係が深まる場合、病弱な妹への思いやりが徐々に、自然に恋愛感情へ変化するように描写する. ・ゲームの操作方法はコマンド選択式またはコマンド入力式とする. ・すべてUNIXシェル内部で処理し,外部コマンドは呼び出さないこと. (ポイント) ☆UNIXシェルにするには,ファイルの最初に #!/bin/bashというおまじないを書く. ☆コマンド選択方式のゲームにする場合、select文を使用できる。 ☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.) 誰かわかるひとお願いします
なったっていうか元から
>>73 おにいちゃん、寂しいこと言わないで・・・
好感度 :-2
ストレス:+5
くだらねえからもっとネタとしておもしろいお題提供してくれ
76 :
名無しさん@お腹いっぱい。 :2010/02/28(日) 00:22:12
コマンドとかBシェルはいろいろ使っていましたし、使いこなせますって言ったら うちはKだしなって言われました。 個人的にはコマンドとか多少は違っていてもBシェル知っていたら、 それなりにKシェルとかでも対応できるじゃんと思っていますが いまいち違いがわからないのですが 具体的にBシェル、Cシェル、Kシェルの決定的な違いってあるのでしょうか? たとえばこれがあるからこれを採用しているとか
あなたのいうBシェルがBourne Shell (/bin/sh) のことなら、 相手の言うKシェル(Korn Shell)はそれのスーパーセットなので、 機能が増えていると思えばいい。商用のUNIXだとkshがふつーに入っている。 あなたのいうBシェルがGNUのBourne-Again Shell(bash)のことなら、 同じようにBourne Shellのスーパーセットではあるが、kshとは系列が異なる。 /bin/sh の機能の範囲では大差ない。商用だとkshが、フリーだと bashがそれの上位シェルとして使われていると思えばよい。 Linux だと /bin/sh だと思っても実体が bash だったりして知らない うちに固有の機能に依存していることがあるので気をつける。 Cシェルのことは忘れていい。
79 :
名無しさん@お腹いっぱい。 :2010/02/28(日) 01:11:10
シェルスクリプトとVBA、どちらが簡単ですか?
シェルスクリプト
>>80 シェルスクリプトと比較して、VBAはどこがどんな風に難しいのでしょうか?
処理系の入手が有償なとこ
3日も前の事を今時って…
bashの '-ne' は '=' ですか?
bashじゃなくても -ne と = は違います。
bashで '-eq' は '==' ですよね。 '=' はどう書くんでしょう?
何を意味する = だ?
bashじゃなくても -eq と = は違います ついでに、-ne と != も違います
bashでは比較の '=' と '==' は同じ。 しかし、'='または'==' と -eq は違う。
今時の「UNIX」はbashじゃなくても'=='が使えるから無問題
で、今時の「UNIX」の定義にループ
ったく…今時の若いモンは…ブツブツ
混乱中...
その混乱してる行をコピペしてみろよ
rpmの.specの中で %preun if [ "$1" -eq "0" ]; then
>>96 "$1"が 0 でも 00 でも 000 でも一致するのが -eq
if [ "$1" = "0" ]; then こうすれば0のみの一致になる?
if [ x"$1" = x0 ] ; then と、xをつけたくなってしまうバッドノウハウ
>>99 その xを付けるバッドノウハウが必要になるような "$1"の例が、
今時のUNIXシェルには存在しないんだな。
よってxを付けるバッドノウハウは不要。
ash(またはdash)だと、$1 が ! のとき、[ "$1" = 0 ] でコケる。 bash/ksh/zsh だとコケない。確かにUNIXシェルならコケないな。
>>100 文字として比較するか、数値として比較するか
UNIXシェルと言っているが、HP-UXなんかはPOSIXだお bashに似ているが、微妙に違う罠
ファイルから1レコード読み込んでそのバイト数を取得したいのですが、レコードの最後にスペースがあると上手く行きません。 echo $record | wc -c で取得できると思ったのですが、echoが末尾のスペースをカットしてしまい、上手く行かず… どんな工夫で解決できるでしょうか?
$record に格納する時点でスペースが落ちてるんじゃないの。 $record にはどうやってデータ格納してるの?
>>106 まだテスト段階で、本格的なコーディングはしていないのですが、
record=`head -1 ファイルパス`
echo "${record}@" …ここではスペースが入っているのを確認
echo ${#record} …スペース込みの文字数が出力されるのを確認
echo $record | wc -c …バイト数が足りず
ということで、パイプする前のechoでスペースが落ちてるんじゃないかと…
なんで " を使ったり使わなかったりするのかに興味あるわ
で、今度は echo "$record" | wc -c …バイト数が1個多い、、 、、と言うと予想。
>>107 sh-3.2$ bar="space "
sh-3.2$ /bin/echo -n ${bar} | wc -c
5
sh-3.2$ /bin/echo -n "${bar}" | wc -c
6
>>110 $ bar="space "
$ /bin/echo -n "${bar}" | wc -c
10
???
>
>>111 -n オプション(出力後改行しない)を持たないecho実装だとそうなる。
- n 空白 s p a c e 空白 改行
そういうのってストレートに性格が出るよな。
$ bar="-n" $ /bin/echo -n "$bar" | wc -c 0
>>105 >>107 echo ${#record} で目的の結果が得られているのに、
なぜ echo -n "$record" | wc -c とかわざわざ外部コマンドでやろうとするの?
(ダブルクォートと -n は付けておいたよ)
まず service httpd configtest して syntax OK が出た場合のみ service httpd graceful を実行する という処理を一行で可能でしょうか?
一行で可能です
わかってくださいよ
わかりました。
ありがとうございます。 今環境がないので、今度客先に行った時に試してみます。
環境変数に配列の宣言文を入れておいて、子シェルで配列を使いたいんですけど、上手くいきません。 export HOGE="(A B C D)" hoge=${HOGE} export HOGE=(A B C D) hoge=${HOGE} の両方試してみたのですが、どちらもhogeには文字列ががが 要素が10個近くあるので、それぞれ別の変数に入れて渡すとごちゃごちゃしそうで… なにか良い方法はないですかね?
>>122 bash なら
hoge=("${HOGE[@]}")
これでどうでしょうか。
ががが
125 :
名無しさん@お腹いっぱい。 :2010/03/15(月) 07:03:40
>>122 export HOGE="(A B C D)"
(子プロセスで)
eval hoge=${HOGE}
>>123 同じシェルだとうまく行くが、
配列はexportできないので、
それでは駄目。
function grepall(){ find . -name "*" -exec grep $1 {} /dev/null \; } findとexecを毎回打つのがめんどいんで こんなのを書いたんですが grepall "int main"とかやると "int main"を含む行じゃなくて intかmainを含む行が出力されてしまうんですが そうならないようにできたりしますか?
>>126 function grepall(){ find . -exec grep "$1" {} /dev/null \;;}
か?
つーか GNU grep の -r 使えばいいんじゃね。
おお、どちらでもいけますた!ありがとう
cat ${file} |while read line do echo "${line},1" done でファイルの中身をグルグル回すシェルを作りたいのですが、ファイルの改行コードが落ちてしまうのはどうにかならないでしょうか? 読み込むファイルがCRLFなので、LEだけ落ちてCRだけ残るというなんとも半端なことに… どうせならCRもまとめてなくなるか、CRLFのまま残るかして欲しいんですが…
>>129 echo "${line},1"
ってやってるなら、行末に ",1" が付くわけだけど、
${line}に ^M が含まれてるなら、"...^M,1" ってなるわな。
それ、LFが落ちてるわけじゃないよ。
131 :
名無しさん@お腹いっぱい。 :2010/03/17(水) 22:37:25
cat file | tr -d '\r' | while
132 :
名無しさん@お腹いっぱい。 :2010/03/18(木) 01:33:45
dos2unixコマンド使えば?
そんな、baseにない非標準コマンド使われてもねぇ
>>130 しかし、Windowsに持ってきてエディタで開いたり、バイナリエディタで見てもCRだけ残っているのですが…
>>131 やはりそういう形になりますかね…試してみます。
>>134 おまえ、
>>130 の言ってる意味わかってないな。
CR+LFのLFが落ちてCRだけ残ったのではなく、
もともとCRが普通の文字とみなされて、
その後に「,1」が追加されただけのことで、
LFが落ちたわけではないんだと言ってるんだけど。
シェルって言ってるクズを相手にすんなよ。
tr とか dos2unix(笑)とかの外部コマンドを使うより、 IFS= の中に ^M を入れておくと readの際に自動的に CR を落してくれる。 これが最適解。
デフォルトのIFSって何だっけ?
スペース・タブ・LF
IFSって?
International FreeBSD School
OK, 願書もらってくる! bakanisareta... orz
というか、Kシェルはclassic Bシェルの拡張の一つ ただ、Bashとは違う
質問させてください。 関数に渡す引数の中に、5C問題を起こすコードとスペースが混じっている可能性があるとき、どうやって渡せばいいんでしょう? Fanc '${hoge}' だと${hoge}が文字列になってしまうし、 Fanc "${hoge}" だと5C含みの文字がエスケープされて文字化ける
146 :
145 :2010/03/22(月) 23:31:14
変なところで改行してしまいました。申し訳ないです。 上手く変数を展開しつつ、さらにエスケープを抑止する方法はないでしょうか? よろしくお願いします。
>>143 いや ksh は bourne sh とぜんぜん違うでしょ。
機能的には bash の方がよほど近い。
bsh は ${hoge%fuga} とか ${#hoge} とか $((1+1)) とかどれも使えない。
~ がホームディレクトリに展開されないぐらいだし。
>>147 今現在 B-shと言ったら、*BSDの ash または debianの dash相当のシェルを指す。
で、その B-shでは、${hoge%fuga} とか ${#hoge} とか $((1+1)) とか
すべて使える。
ちなみに、OpenSolarisからはBourne-shが消えて、
/bin/shは kshへのsymlinkになってる。
bash > ksh > {d,}ash
「Bourne Shellの文法の範囲内でのみ記述すること」の主張の 最大の根拠がSolarisに現存していたBourne Shellだったわけだが、 SolarisのBourne Shellがなくなったことで、 Bourne Shell互換で記述する意味がなくなってしまったな。。
>>150 OpenSolaris にも bourne sh はあるよ。
パスが /usr/has/bin/sh に変わったけど。
>>148 >今現在 B-shと言ったら、*BSDの ash または debianの dash相当のシェルを指す。
これ、ふつー posix shell といわない?
>>144 は classic Bシェルという言葉を出してるわけだし、
昔からの bourne sh の方を言ってると考えるのが妥当じゃないかと。
シェル雑談はいいから
>>152 ashやdashぱ posix shellじゃないよ。
たとえば、[[ ]] とかが使えないし、、
つーか、あれが使えないとか、コレが欠陥なんて かんけーねーだろ。 自分が求める仕事が完結すれば、シェルは何だって良い。 酸いも甘いも理解して使えばいいんだよ
>>152 /usr/has/bin/sh は歴史的遺物として置いてあるのであって、
実際のスクリプトで使われていないし、使ってはいけない。
言えてる。別システムで使う予定も無いくせにな アホくせ
一昔前ならいざ知らず、未だにこんな事言ってる化石がいるから衰退すんだよ。
さーて 夕飯までにcshでちょろっと組むかな
[[ ]] はPOSIX shellの仕様に無いと思ったが
こまけぇことはいいんだよ
162 :
名無しさん@お腹いっぱい。 :2010/03/24(水) 01:17:36
ごもっとも。
このスレからこまけぇことを取ったら何が残るんだよ
敗因…
166 :
名無しさん@お腹いっぱい。 :2010/03/24(水) 02:07:00
イーンダヨ!
グリーンだよ
ashみたいに、posixシェルでもBourneシェルでもないBシェルを 総称して何と呼べばいいの?
糞シェル
ラルク・アン・シェル
クミコ・タケダ・オン・シェル
シェル・ファントムハイヴ
エコール・デュ・シェル
マイヨ・アルカンシェル
銀と真紅のアルカンシェル
>>160 あるよ。
if [[ ${1} = AAA]] ;then
とか可能
ashには、$(( )) はあっても、(( )) がないな。 letコマンドの動作も変だし。
180 :
名無しさん@お腹いっぱい。 :2010/03/26(金) 01:06:03
仕事の時は細かいことはどーでもいーが、 それ以外なら細かい話もよしではある。
(( )) はPOSIX shellの仕様に無いと思ったが
こまけぇことはいいんだよ
183 :
名無しさん@お腹いっぱい。 :2010/03/27(土) 21:42:06
教えていただきたい 例えば以下のようなテキストファイル、file.hoge1があるとします。 AAA111ZZZZ BBB222ZZZZ CCC333ZZZZ DDD444ZZZZ これに対して、先頭CCCで始まるレコードの4カラム目から3カラム つまり「333」を「XXX」にしたい。 AAA111ZZZZ BBB222ZZZZ CCCXXXZZZZ DDD444ZZZZ しかし「333」の位置には半角3バイトではあるが必ずしも「333」が入っている訳ではなく 何が入ってるかは一定でない。 これの解をお願いします。
sedでいいんじゃね?
185 :
183 :2010/03/27(土) 22:01:24
333が固定なら sed "s/^CCC333/CCCXXX/" file.hoge1 でいけると思ったのですが。。。 solarisのsh,kshです
s/^CCC.../CCCXXX/ ならCのあと何でも3文字いけるお
187 :
183 :2010/03/27(土) 22:08:50
その記述だ! ありがとう!
POSIX?shellとBourneShellって同じものでしょうか?
全然違います
>>189 返信thx!
POSIXシェル、Cシェル、キーシェル、コーンシェル
のどれかを今日中にある程度使えるようになりたいんだけど
何か良い方法ないですかねw
参考サイトや本と、実行環境が整えば・・・
環境なんてどこにでもあるし サイトなんてぐぐればたくさん出てくる。
キーシェルってなんだろう。昭和シェルなら知ってる
>>191 そうなのですか
家のfedoraでコーンシェルが動かないっぽくて絶望してました
探してみます
>>192 keysh?らしいです
何かはよくわかりません><
シェル童貞から質問です 2010年にもなってダイアルアップuucp環境を構築しようとしています('A`) cronで一定時間毎にuucpキューをチェックして、1つでも中身があればuucicoで ダイアルアップ接続・・・という事をしたいのですが正直構文がわかりません uustat -q|wc -lでキューの中身をカウントし、0じゃなければuucicoを実行したいのですが・・・ #!/bin/sh uustat -q|wc -l val=$? if test ${val} -ne 0 then /usr/sbin/uucico -s uucp-domain else echo "no mail in uucp queue." fi exit 0 考えたら"wc -l"は行数を表示するコマンドで戻り値は成功すれば0なので $?も0だから上記の記述じゃ条件が常に偽になりますわな ○<\_ 戻り値じゃなくてwc -lの表示結果の数値を変数に格納する方法を教えて下さい
status=`uustat -q|wc -l`
198 :
196 :2010/03/28(日) 17:53:58
スクリプト初心者にアドバイスをお願いします。 CSVファイルをシェル配列に格納していろいろ加工しようと思っています。 が、CSVに空の項目がある場合に上手く格納できず、空項目を無視してしまいます。 ------------ソース------------- cat ${file} | while read line eval ARRAY="(`cat ${line} | awk {'print $1,$2,$3'}`)" →以降ARRAYを加工 ----------ソースここまで--------- これを実行すると AAA,BBB,CCC →ARRAY[0] =AAA,ARRAY[1] =BBB,ARRAY[2] =CCC ⇒ 想定通り ,BBB,CCC →ARRAY[0] =BBB,ARRAY[1] =CCC ⇒ ARRAY[0]=””,ARRAY[1] =BBB,ARRAY[2] =CCCにしたい 何か工夫が必要なんでしょうか?
200 :
199 :2010/03/30(火) 07:28:56
間違えました… × awk {'print $1,$2,$3'} ○ awk -F , {'print $1,$2,$3'}
201 :
名無しさん@お腹いっぱい。 :2010/03/30(火) 08:29:01
やっつけ #!/bin/bash file=hoge.csv cat ${file} | while IFS=, read ARRAY[0] ARRAY[1] ARRAY[2]; do echo 0: ${ARRAY[0]} echo 1: ${ARRAY[1]} echo 2: ${ARRAY[2]} done
>>201 IFSって上書きした時の影響範囲ってスクリプト内だけなんですね…全体だと思ってました。
教えていただいたソースで実現できました。
ありがとうございます。
が、もう一度処理を見直した結果、ARRAYの加工と同時に元の${line}も使用するので、
一度lineに格納してから改めてARRAYに分割・格納する必要があることが分かりました。
条件が後出しになってしまって申し訳ありませんが、何か方法はないでしょうか?
set - $line
>>203 setを使ってみましたが上手くいかず…
ARRAY=`set - ${line}`
でいけるんですか?
>>204 set は $1 $2 $3 ... に値をセットする。
あぁ、釣りか。 つられちゃったw てへっ?☆
>>202 line=',aaa,bbb'
IFS=,
ARRAY=($line)
208 :
名無しさん@お腹いっぱい。 :2010/04/08(木) 06:05:00
シェルスクリプトで2つのジョブを同時に実行した後、両方が終了するのを待つにはどうのようにしたらよいのでしょうか? ./a & ./b これだと、2つめのジョブの終了は待ちますが、1つめはまだバックグランドで実行されている可能性が出てしまいます
./a & ./b wait
または ./a & ./b & wait
まじ。
>>208 前スレか前々スレに確かそんな話題があった
214 :
名無しさん@お腹いっぱい。 :2010/04/28(水) 14:12:30
質問です。 シェルスクリプト(bash)内で、非同期で他のシェルを呼び出したり、 javaコマンドを実行したりしたいのですが、どのように書けばよいのでしょうか。 (戻り値は必要無いです。)
&
>>215 bashのmanpageみたら確認できました。
(非同期、で検索してたので見落としてました。)
ありがとうございます。
217 :
名無しさん@お腹いっぱい。 :2010/05/05(水) 04:29:57
bashとksh使ってます。 if文で以下、括弧の違いを教えてくれませんか? ぐぐっても分からなかった・・・ 2重も1重も同じとおもってよいのでしょうか? if [[ xxxx ]];then if [ xxxx ];then
おはようございます。教えて下さい。 シェルスクリプトの中で、 ls /honya/* >> list.txt をしたファイル名使いたいのですが、 Directory や Filenameにメタキャラやらスペースがいっぱい あります。そんなの作るなって言えれば、いいのですが、ユーザ さんは、Windowsだし。見てるとそれなりに規則性があって 運用してるんだなってわかります。 話がそれましたが、シェルの中での処理を教えて下さい。 よろしくお願いします。
>>217 [[ hoge -a boke ]] は文法エラー
[[ hoge && boke ]] と書く
[ hoge && boke ] は文法エラー
[ hoge -a boke ] と書く
-o と || についても同様。
[[ hoge = h* ]] は真
[ hoge = h* ] は偽(ただしカレントディレクトリにhogeというファイルがあると真)
>>218 ファイル名に改行コードが含まれていないなら、
ls /honya/* >> list.txt
while IFS= read -r hoge
do
echo "$hoge"
done < list.txt
の形で処理できる(メタキャラやらスペースもOK)
変数を参照する時には "$hoge" のように必ず " " を付けること。
>>217 ,218
ありがとうございます。さすがです。
読み込んだファイルを sed か tr 一つづつ 変換して書き出すしか
ないかなぁって思ってました。
こんな方法があるのですね。勉強させていただきました。
>>221 >>220 のようにlsの結果を使うのは素人。↓こういう仮定を勝手に設定してはいけない。
> ファイル名に改行コードが含まれていないなら、
for fname in /honya/*;do echo "$fname";done
が正しい。
>>222 おまえ、もっとアホ
それではファイル名のスペースがもろに分離されてしまって
全く動作しない。
まあ、釣りだろうけど
>>222 質問自体が、
「lsの結果のファイルがすでにあって、それを処理するスクリプトが欲しい」
ということなのだから、lsの結果を使うことまでは「前提条件」かと。
>>223 分離されねーよ。
恥をかきにのこのこ出てきて… これほどのバカはめったにいない。
>>224 ダメな前提の質問なのだから、正しく処理するスクリプトを作成する事は不可能。が正解。
>>223 笑殺させられたくないから、もうひとつ先に言っといてやる。
「ARG_MAX超えたら動作しない」とか言い出すなよ。
確実に5人は笑い死にするぞ。
>>219 ありがとうございます。
括弧の数によって、&&や-aの使い方が変わるのですね。
一般的には、二重括弧でよいのでしょうか?
>>227 一般的には [ ] の方が良い。
[[ ]] は互換性がないので使わない方がよい。
218です 僕の質問が悪くて、申し訳ありません。 取り敢えず、シェルは完成して、今テスト中です。 結局、シェルの中で、Find -type f して、コマンドに 渡しました。 ここにアップしたら、見てもらえるかなぁなんて都合 良すぎ? エラー処理とか全然してないんですが・・・。
シェルってゆうな。クズ。
つスルーカ
>>233 おまえさぁ、ここUnix板だぜ。
技術系の板で、あほか。
つルーカ
つ スツーカ
>>235 新参乙です(悪いとは言ってない)
さんざんガイシュツ。
ま、ここの人は優しいから俺以外のシッタカが教えてくれます。
先生、頭のおかしい人がいます
rsync で複数のディレクトリ、例えばホームディレクトリ直下の tex org .emacs.d .w3m の4つを ローカルと別のマシン hoge.example.net とで同期したいとします。 #!/bin/sh cd rsync -avzu -e ssh {tex,org,.emacs.d,.w3m} hoge.example.net: rsync -avzu -e ssh hoge.example.net:\{tex,org,.emacs.d,.w3m\} . とすればできますが、この {tex,org,.emacs.d,.w3m} 部分を1つの変数 export FILES="{tex,org,.emacs.d,.w3m}" のようにしたいのです。これでは {} が展開されず、そんなファイル名はありませんとなります。 for で回すのも手ですが、rsync を何度も呼び出すことになりコストがかさむため一度のrsyncで行いたいのです。 どのようにすればうまく一つの変数に入れられるでしょうか?
まず配列を用意します
ごめん嘘 普通に空白区切りの変数でいいじゃないか
/bin/shがブレース展開してくれるOSは板違いです。
>>243 その判断基準だとOpenSolarisも板違いになってしまいますな。
OpenSolarisってbashだろ?
>>246 OpenSolarisの /bin/sh の正体は ksh93 (Solaris10以前とは違う)
OpenSolarisの bashは /bin/bashで、/bin/shとは別。
248 :
240 :2010/05/06(木) 13:36:52
>>242 空白区切りだと hoge.example.net:を全てに付与できなさそうなのです。
>>243 wwwwwww
Mac OS XなのでUNIXですけどwwww
>>244 とりあえず eval でいけそうですね。
FILES="{tex,org,.emacs.d,.w3m}"
rsync -avzu -e ssh `eval echo ${FILES}` hoge.example.net:
rsync -avzu -e ssh `eval echo hoge.example.net:${FILES}` .
こういう感じでしょうか
ありがとうございました。
Mac OSはbash七日? > rsync -avzu -e ssh `eval echo hoge.example.net:${FILES}` . こっちはeval不要。
250 :
240 :2010/05/06(木) 13:50:49
>>248 % ls -l /bin/{sh,bash}
-rwxr-xr-x 1 root wheel 1346544 2010-02-05 09:41 /bin/bash*
-r-xr-xr-x 1 root wheel 1346624 2010-02-05 09:43 /bin/sh*
% diff /bin/{sh,bash}
Binary files /bin/sh and /bin/bash differ
微妙に違うみたいですがほとんど同じなのかも知れません。
eval 不要でしょうか?
evalがないと、
ls -d `echo hoge.example.net:${FILES}`
ls: cannot access hoge.example.net:{tex,org,.emacs.d,.w3m}: No such file or directory
となって{}を展開してくれませんでした。
Macなら新Mac板で聞けば。
>>250 rsync -avzu -e ssh hoge.example.net:${FILES} .
ところで、FILESじゃなくてDIRSだろ。
ディレクトリもファイルだと教わらなかったか?
>>249 $ echo $SHELL
/bin/bash
$ bash --version
GNU bash, version 3.2.17(1)-release (i386-apple-darwin9.0)
Copyright (C) 2005 Free Software Foundation, Inc.
お前のログインシェルなんて誰も聞いちゃいない
一応/bin/shのも貼ってあげるよ。 $ /bin/sh --version GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0) Copyright (C) 2007 Free Software Foundation, Inc. $ ls -il /bin/sh /bin/bash 12727992 -rwxr-xr-x 1 root wheel 1346544 2010-02-05 09:41 /bin/bash* 12728038 -r-xr-xr-x 1 root wheel 1346624 2010-02-05 09:43 /bin/sh* てっきりハードリンクだろうと思ったらちがったので驚いている。
>>255 Mac OS Xの /bin/shは Bash七日? と聞いてるんだから、
$ /bin/sh --version の結果を貼らないと。
まーどうでもいいけど
mencoderって知ってますか? 下記のような表示が流れるのですが Ex. Pos: 0.3s 10f ( 0%) 4.88fps Trem: 15min 14mb A-V:0.023 [0:0] こういったコマンドの表示を必要な部分だけ切り出して表示したり、 プログレスバーを作ったりしたいのですが可能でしょうか? Bashでエスケープシーケンスを使うんだろうなぁって思うのですが、とっ かかりが分からなくて。 ご存じであれば、ご教授お願いします。
教授はあげません
「お願い」であって「下さい」では無い。
>>261 bash仮定していいのかな、この場合。
* IFSとset
* ${var#pattern} # のほかに ## % %% など。
* sedのような外部コマンド
>>264 mencoderだということをわかって回答してる?
mencoderが出してくるメッセージは改行なしで1行を書き換えたりしてるので、
行単位に処理する方法では対応できないし、画面に見える文字のまま取り出せる
わけではないんだよ。
/) ( i ))) / ̄\ / / | ^o^ | ノ / < いみがわかりませんなぁ \ / ,/ / _ /´ (___)/
単にCRで同一行に重ね書きしてるだけだよ。それ以上のカーソル制御しているわけじゃない。 でも、mencoder改造した方が楽だよね。
>>267 いや、少なくとも ESC [ J とかのシーケンスは含まれてる。
TERM=unknownで実行すればいい。正しく作られているならそんなコードは出なくなるはず。
超初心者です。入門UNIXshるプログラミングという本で勉強中ですが、 バッククォートによるコマンド置換の説明で以下のコマンドが出てきました。 STRING=`echo "abc \`echo def\` ghi"` echo $STRING 期待値は abc def ghi ですが、 \`echo def\` 部分が `echo def` という文字列にならずコマンドとして 認識されるい理由がわかりません。 かといってバックスラッシュ取っちゃうと動かないわけで。
>>270 外側の ` ` で囲まれている時点で、
たとえ " " で囲んでも、" " の中のバッククォートの意味は消えない。
よって、` ` のネスティングとみなされてコマンド置換される。
バックスラッシュを取ると動かなくなるのは、
そうすると最初の `echo "abc ` まででクォートとみなされて
解釈が期待通りにならないから。
>>270 バックスラッシュの部分は、シェルと、外側のechoコマンドとによって
2回解釈されるので、解釈の結果コマンド置換が実行される。
>>271 大外の `` がポイントということですか。納得です。
バックスラッシュ取ると動かなくなる理由は、そいういう
ことなんだろうなと思ってました。
即レスTHXです。
STRING=$(echo "abc $(echo def) ghi")
ブルースブリンの本か?あの本は古臭いな、色々と
>>275 まだ最初の数十ページしか読んでないけど、丁寧に説明してくれてて
読みやすい。tips的な解説もあるし。
どういうところが古臭いと感じるん?
>>274 ( ) の説明はまだ数ページ先だ!笑
bashを使っています。 echo hoge > /dev/tcp/192.168.0.10/5000 を実行したのですが、接続されません。 /dev/tcp/192.168.0.10/5000: No such file or directory になってしまいます。なぜでしょうか。 192.168.0.10:5000にはサーバプログラムが存在してて telnet等で接続可能な状態です。
犬板に行きなさい。
ああ、UNIXにはbashなかったんだっけ?失礼しました。 Linux板に行ってきます。
>>277 エスパーすると、bashを使ってるつもりでbashではないのでは?
接続されない場合は、connect: Connection refused と表示され、
No such file or directory とはならない。
bash以外のシェルだと、No such file or directoryになるので。
>>277 間違えて csh(笑) で実行するとそのメッセージになるな。
bash-1.x というオチもあるな。
ディス鳥によっては /dev/tcpの機能がdisableされてコンパイルされてるらしい。
実はbashだけどlinuxでなかったとか
バカ? /dev/tcpだから犬板行けって言ったんだよ。
>>284 linuxじゃなくても bashなら /dev/tcp は使えるよ。デバイスファイルじゃないし。
>>285 おまえあほ。
/dev/tcpなんてデバイスファイルはない。
これは Bashの機能。
FreeBSDでも bashを使えば /dev/tcp は使える。
バカ? こんな腐った機能を無効にしてる良心的なディストリもあるから犬板行けって言ったんだよ。
>>287 言い訳見苦しいね。Linuxを目のカタキにしてると /dev/tcpが Linux独自のデバイスに
見えたんだろうね。*BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
>>288 必死だな。バカ。
そのように見えたというソース出せよ。ww
へ〜、/dev/tcp初めて知った。 /dev/tcpなんてファイルは無いのに ソケットを開くという特別解釈をbashの中でしてるんだ。 キモイ。
必死だな。バカ。他人の揚げ足とる事だけ考えてるから、 > 言い訳見苦しいね。Linuxを目のカタキにしてると /dev/tcpが Linux独自のデバイスに > 見えたんだろうね。*BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww こういうバカな思いつきをするんだろうな。 お前、昨日FreeBSDスレに居たJava厨だろ。バカさ加減が同レベルだ。ww
>>285 さんからの遺言です
>バカ? /dev/tcpだから犬板行けって言ったんだよ。
>バカ? /dev/tcpだから犬板行けって言ったんだよ。
>バカ? /dev/tcpだから犬板行けって言ったんだよ。
とても恥ずかしいことなので3回言いましたwww
Macのbashでも出来るぞw $ bash --version GNU bash, version 3.2.17(1)-release (i386-apple-darwin9.0) Copyright (C) 2005 Free Software Foundation, Inc. $ exec 3<>/dev/tcp/www.google.com/80 $ echo -e "GET / HTTP/1.1¥n¥n">&3 $ cat <&3 HTTP/1.1 200 OK Date: Fri, 14 May 2010 07:12:54 GMT ...
295 :
277 :2010/05/14(金) 16:20:58
すみません解決しました。
>>283 さんのおっしゃるとおりでごわした。
最近は awk でも同じような方法で tcp にアクセスできる世の中なんだよなぁ。 /dev/tcp じゃなくて /inet/tcp だけど。
297 :
名無しさん@お腹いっぱい。 :2010/05/14(金) 19:17:20
>>293 お前本当に頭が弱いな。
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
使えてりゃ質問しねーんだよ。www
>>297 お前本当に頭が弱いな。
bashで /dev/tcpが使えるはずなのに使えなかったから質問してたんだろ。
(もともと使えないものならそもそもそういう使い方をしないから質問もしない)
(オチは、./configure 時に --disable してただけ)
ところが、
>>285 は、/dev/tcpというデバイスファイルがLinuxにはあって、
Linuxでしか /dev/tcpが使えないものと勘違いしたんだよ、、、
299 :
名無しさん@お腹いっぱい。 :2010/05/14(金) 20:20:13
>>298 お前かわいそうなくらい頭が弱いな。
> ところが、
>>285 は、/dev/tcpというデバイスファイルがLinuxにはあって、
> Linuxでしか /dev/tcpが使えないものと勘違いしたんだよ、、、
それはお前の妄想。
*BSD(のports, pkgsrc)、Solaris(のコンパイル済みの奴)は使えるように
コンパイルしてある。従って使えないのは
>>283 の指摘通りそのようにコ
ンパイルしているから。
従って、
>>285 > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
使えてりゃ質問しねーんだよ。www
>>285 =
>>283 が、仮に /dev/tcpのことを理解していたなら、
bashの/dev/tcpの質問に対して、「Linux板に行きなさい」と言った理由が
合理的に説明できないな。
よって、
>>285 =
>>283 は bashの/dev/tcp について知らなかった。
ここまでは決定的事実。
で、そこから演繹される事実として、
Linuxには/dev/tcpというデバイスファイルがあって、
Linuxカーネルによって/dev/tcpが処理されてる→Linux特有だからLinux板行け、
と誤って言ってしまったと言える。
303 :
名無しさん@お腹いっぱい。 :2010/05/14(金) 20:56:37
>>301 > bashの/dev/tcpの質問に対して、「Linux板に行きなさい」と言った理由が
> 合理的に説明できないな。
既に楽勝でしている。お前の低性能なJava脳がそれを理解できないだけ。ww
>>303 >既に楽勝でしている。
って、
↓
>>287 >バカ? こんな腐った機能を無効にしてる良心的なディストリもあるから犬板行けって言ったんだよ
↑
これのことだよね。
これって、俺が
>>283 で
>ディス鳥によっては /dev/tcpの機能がdisableされてコンパイルされてるらしい。
って正解言った後の、後出しじゃん。
つまり、
>>287 は
>>283 を見るまでは /dev/tcpについて知らなかったwww
お前ら今日も全力だなw わざわざ見に来る甲斐があるわ
306 :
名無しさん@お腹いっぱい。 :2010/05/14(金) 21:37:56
>>304 低脳全開だな。犬板への誘導はオレ(
>>278 )が真っ先にしている。
一々理由を説明する必要は無い。
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
使えてりゃ質問しねーんだよ。www
おまいら味噌汁ぶっかけんぞゴラァ!
ぶっかけはオプションですよ。
>>306 の主張ポイントがズレまくりで何を言いたいのかわからん。
「使えてりゃ質問しねーんだよ。」って何度も言ってるけど、
じゃあ、「*BSDでもSolarisでも bashで /dev/tcpは使えない」と主張したいの?
だとすると違うよ。実際使えるし。
ああ、やっぱり「Linuxのみで使える機能」と未だに思ってるんだな。
だから
>>278 「犬板に行きなさい。」なんて言ったんだな(笑)
>>306 > 犬板への誘導はオレ(
>>278 )が真っ先にしている。
↑っ言ってるけど、「犬板への誘導」自体が間違い、というのが結論なんだけど。
つまり、
>>306 は、「真っ先に間違いを書き込みました」って
自分で認めてることになる。
よって、
>>306 の負け。
>>283 > ディス鳥によっては /dev/tcpの機能がdisableされてコンパイルされてるらしい。
が正解だけど、補足すると、「ディス鳥によっては」の部分は重要じゃなくて、
「/dev/tcpの機能はbashのコンパイル時に無効にすることもできる」
ってのがポイント。*BSDでもSolarisでも、/dev/tcp無効のbashは作れる。
よって、
>>283 はLinux板に誘導はしていないし、Linux特有とも言ってない。
Linux板に誘導した
>>278 、Linux特有と勘違いした
>>278 が間違い。
>>309 お前がバカで理解できないだけ。
>>310 > 「犬板への誘導」自体が間違い、というのが結論なんだけど。
お前の妄想。
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
使えてりゃ質問しねーんだよ。www
たぶん、
>>285 > バカ? /dev/tcpだから犬板行けって言ったんだよ。
を書いてる時点で、
>>283 >ディス鳥によっては /dev/tcpの機能がdisableされてコンパイルされてるらしい。
はすでに読んでたはずだけど、この「コンパイル」というのが、
bashのコンパイルじゃなくて、Linuxカーネルのコンパイルのこどだと
>>285 が誤解したんだろうな。
だから、
>>283 を読んだ時点でもまだ「Linux特有の機能」と思い込んでいたからこそ、
>>285 みたいなことを書いたと説明がつく。
314 :
名無しさん@お腹いっぱい。 :2010/05/14(金) 22:14:08
>>313 壊滅的にバカだな。
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
使えてりゃ質問しねーんだよ。www
>>312 >> 「犬板への誘導」自体が間違い、というのが結論なんだけど。
> お前の妄想。
↑
ということは、「犬板への誘導が正しい」と主張するわけ??
だったら、/dev/tcp が Linux独自のデバイスファイルであると
まだ思い込んでるの??
あと、試しに手元のFreeBSDとかのbashで試してみろ。
ちゃんと/dev/tcpが使えるから。
それでLinux板への誘導が間違ってたことが理解できたかい?
316 :
名無しさん@お腹いっぱい。 :2010/05/14(金) 22:24:16
>>315 ディストリよっては無効にされている場合がある。これはお前も言っている事だ。
この板で「XXというディストリです」と言われても「おそらく無効になっている」事しか
わからない、犬板なら「そのディストリは無効になっている」事までわかる。
だから犬板で聞くのが正しい。
> ということは、「犬板への誘導が正しい」と主張するわけ??
> ということは、「犬板への誘導が正しい」と主張するわけ??
> ということは、「犬板への誘導が正しい」と主張するわけ??
> ということは、「犬板への誘導が正しい」と主張するわけ??
> ということは、「犬板への誘導が正しい」と主張するわけ??
> ということは、「犬板への誘導が正しい」と主張するわけ??
お前、バカすぎる。考える事を止めた方が良い。www
>>314 「*BSDでもSolarisでも bashで /dev/tcpは使える」は正しい。
「*BSDでもSolarisでもLinuxでも bashで /dev/tcpは使える」も正しい。
「*BSDでもSolarisでもLinuxでも、bashの./configureで/dev/tcpを無効にできる」も
正しい。
よって、どこにもLinux特有の事項がない。
元質問の
>>277 にはOSは書いてなくて、
bashで/dev/tcp云々としか書いてないから、
これだけだと FreeBSDやSolarisで、bashを自分で./configureして
使っている可能性もある。
よって、
>>277 の質問だけで
>>278 「犬板に行きなさい。」と言ったということは、
>>278 が /dev/tcpがLinux独自の機能だと誤解していたからに他ならない。
>>316 >この板で「XXというディストリです」と言われても
↑言ってないことを仮定するな。事実を曲げるな。
元質問者の
>>277 はディストリもOSも言ってない。
それから、
>>283 「ディス鳥によっては /dev/tcpの機能がdisable…」を
見るまで正解を知らなかったくせに、後出しで
>>283 が言ったことを
最初から知ってたようなふりするのをやめろ。
>>316 UNIX板的には、bashを objdump -T してみて、
socket()などのネットワーク系の関数が呼び出されているかを確認して、
本当に /dev/tcpの機能が compile in されてるかどうか確認する方法を
教えることもできたはずだ。
これも、OSもディストリも関係なく行なえる方法だ。
なのに、
>>278 「犬板に行きなさい。」 がすべてを台無しにした。
>>317 記述されていなくてもわかる。
デフォルト有効なのだから、野良コンパイルした場合に、知らずに無効になっている事はない。
従って、コンパイル済み(もしくはmake一発のports, pkgsrc)と予想できる。
そして、ports,Solarisは有効になっているのだから、残りはLinuxと予想できる。
バ カ に は 予 想 出 来 な い ら し い が。 w w w
>>318 知らなかったというのはお前の妄想。www
> 元質問者の
>>277 はディストリもOSも言ってない。
犬臭さが漂ってるから楽勝でわかる。事実あたっている。
>>316 >「XXというディストリです」と言われても「おそらく無効になっている」事しか
>わからない
>>319 が言うように、objdump -T で、/dev/tcpが無効になってるかどうか
確認する方法を知らなかったんですね(笑)
>>320 >野良コンパイルした場合に、知らずに無効になっている事はない
↑
知らずに無効になっている事は「ある」
野良コンパイルの参考に、Web等から ./configureのオプションをコピペして、
本人も忘れてることなんて普通にある。
>>319 後出しの言い訳。必死だな。
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
使えてりゃ質問しねーんだよ。www
>>323 後出しジャンケンだから何でも言えるよな。
実際そんな予想ができてたわけないのに。
今北産業
>>324 が何度もコピペしてる
「*BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww」
って、誰への反論なの?
実際*BSDでもSolarisでも bashで /dev/tcpは使えるし、
>>324 自身は使えないと思ってたんだとすると、
>>324 が言ってることは「自分が間違ってたと」自分に言ってることになるだけど、、
まとめ:
>>278 =
>>285 が知らなかった(そして恥をかいた)こと。
・/dev/tcpはLinux独自のデバイスファイルだと思っていた
・bashが/dev/tcpを特別扱いすることを知らなかった
・FreeBSD等でも、bashで/dev/tcpを使えることを知らなかった
・bashのコンパイル時に/dev/tcpを無効にすることができることを知らなかった
・OSやディス鳥がわからなくても、bashバイナリをobjdump -Tして調べる方法を知らなかった。
今日はやけに盛り上がってるな
俺も嬉しいよ
331 :
名無しさん@お腹いっぱい。 :2010/05/14(金) 23:17:18
>>327 >>288 に決ってんだろ。
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
使えてりゃ質問しねーんだよ。www
>>328 バカが、必死すぎる。www
>>328 >・/dev/tcpはLinux独自のデバイスファイルだと思っていた
俺も最初そう思っちゃった。 で、自分のシステムには無いから
一生懸命カーネルオプションをあさり始めたw
>>331 質問と回答は、質問者だけのものではない。
その質問と回答を読んだ第3者にとっても有益であるべきものだ。
質問がLinux独自のもので、Linux以外のUNIXユーザーに無益なものなら
Linux板への誘導が適当であろう。
ところが、
>>288 が言うように、
「*BSDでもSolarisでも bashで /dev/tcpは使える」
よって、bashの/dev/tcpに関する質問と回答をUNIX板で行なうことは
UNIXユーザーにとって有益である。
335 :
名無しさん@お腹いっぱい。 :2010/05/14(金) 23:38:09
>>333 >>277 が使用しているのが*BSDやSoalrisであるならば動くのだから、
*BSDでもSolarisを持ち出すのは的外れ。
そんな単純な事に気付かない
>>288 を大笑いしている。
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
使えてりゃ質問しねーんだよ。www
>>334 後付け&&自演乙
個々のディストリのコンパイルオプションなんて興味ねーんだよ。
しかもスクリプトに関する質問じゃねーし。
>>335 >
>>277 が使用しているのが*BSDやSoalrisであるならば動くのだから、
↑
その仮定が間違い。
>>322 で言ってるように、*BSDやSoalrisの野良コンパイルで、
知らずに /dev/tcpを無効にしてしまってることはある。
それから、
>>288 は質問者に対して答えてるんじゃなくて、
>>287 が/dev/tcpのことについて知らなかったみたいだから、
「*BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww」
と教えてあげてるんだよ。
いずれにしても、キミが最初から本当に /dev/tcpのことを知っていた上で
Linux板に誘導したのではないことはバレバレ何だから、
見苦しい言い訳はやめとけ。
>>336 >しかもスクリプトに関する質問じゃねーし。
↑
ハイ、ここ間違い。/dev/tcpはスクリプトに関する質問。
インタラクティブにも使おうと思えば使えるが、
インタラクティブならtelnetとかnetcatが使えるからそんなことしない。
/dev/tcpでやろうとするのはスクリプトの場合。
339 :
名無しさん@お腹いっぱい。 :2010/05/14(金) 23:48:49
>>337 お前にはわからなかっただけで高い確率で予想出来ていた。事実合っている。
お前の言いがかりは既に論破されてる。低性能なJava脳のではそれが理解できてないだけ。
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
使えてりゃ質問しねーんだよ。www
340 :
名無しさん@お腹いっぱい。 :2010/05/14(金) 23:49:05
>>294 このファイルディスクリプタの3がwww.google.comに対して
開かれているというのを調べる方法を教えて下さい。
lsofで調べてみたけど分かんなかった
341 :
名無しさん@お腹いっぱい。 :2010/05/14(金) 23:51:52
>>340 ls -l /proc/プロセスID/fd/3
でわかるでしょ?
>>341 それだとsocketだということしかわからない。
>>340 lsof -i で接続先のホスト名まで出るけど
>>341 ,342
ありがとうございます。
lsof -i
で出ました;-)
>>339 が、「Linuxの一部の鳥のbashでは/dev/tcpが使えないものがある」なんて
知っていた可能性はゼロ。
実際には、/dev/tcpというLinuxのデバイスだのbashだののキーワードに
脊髄反射して「Linux板池」と言った。
ところが、
>>283 によって/dev/tcpのことを説明され、
恥をかいた
>>339 は、最初から/dev/tcpのことを知っていたかのように
装い始めた、というのが真相。
本当に最初から/dev/tcpのことを知っていたなら、
>>278 で「犬板に行きなさい」なんて言わずに、
たとえば「うちのFreeBSDでは
>>277 でうまく行くけど」とか、
「bashのバージョンは?」とか、
そういう反応になっていたはず。
そういう反応になっていなかったということは、
>>278 は /dev/tcp を知らなかった、が結論。
345 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 00:16:31
>>344 すでに論破された妄想を繰り返すな。見苦しい。
お前のバカを基準にして言いがかりをつけていただけ。
↓バカの証
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
使えてりゃ質問しねーんだよ。www
>>295 で、結局どのUnixなのか気になるから教えてくれません?
347 :
346 :2010/05/15(土) 00:29:08
何だ、もう終わっちゃったのか。寂しいな。
>>345 何言ってるの?
>>345 はすでに論破されている。
というか、
>>333 が言ってるように、
何度もコピペしてる
>>345 等は最初から論点がズレていて
反論になってない。だから何回コピペしてもほとんど相手にされてない。
もう一度まとめると、
>>278 =
>>285 が知らなかった(そして恥をかいた)こと。
・/dev/tcpはLinux独自のデバイスファイルだと思っていた
・bashが/dev/tcpを特別扱いすることを知らなかった
・FreeBSD等でも、bashで/dev/tcpを使えることを知らなかった
・bashのコンパイル時に/dev/tcpを無効にすることができることを知らなかった
・OSやディス鳥がわからなくても、bashバイナリをobjdump -Tして調べる方法を知らなか
った
・野良ビルドでも、Web上のコマンドラインをコピペして知らずにdisableオプションを付
けていて本人が忘れてることが良くあることを知らなかった
・/dev/tcpはスクリプトで使うものだと知らなかった(
>>338 が指摘)
>>345 は論点のすり替えだな。
>>288 >言い訳見苦しいね。Linuxを目のカタキにしてると /dev/tcpが Linux独自のデバイスに
>見えたんだろうね。*BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
↑が言ってるのは、「/dev/tcpはLinuxだけで使える」←に対する反論として、
「*BSDでもSolarisでも bashで /dev/tcpは使える」と言ってるに過ぎない。
「使えてれば質問しないかどうか」の結果がどうであれ、
「/dev/tcpはLinuxだけで使える」←が間違いであると言う事実の主張に対する
反論にはならない。
「/dev/tcpはLinuxだけで使える」と思っていた
>>278 =
>>285 が
苦肉の策で思いついた言い訳が
>>345 他多量の同文コピペというわけだなwww
流れを振り返ってみよう
>>277 (元質問)
↓
>>280 (/dev/tcpがbashの機能だと正しく知ってる回答者)
>エスパーすると、bashを使ってるつもりでbashではないのでは?
>>285 (/dev/tcpはLinuxの機能だと誤解してる馬鹿)
>バカ? /dev/tcpだから犬板行けって言ったんだよ。
↑ 285の「バカ」は280に対して言っている。つまり、
「bashをいくら追求しても、Linuxじゃない限り/dev/tcpは使えない」と
思い込んでいる。
「/dev/tcpだから犬板」という言い方は「/dev/tcpイコールLinux」と考えてるからこそ
出てくる言葉。
↓
>>286 (/dev/tcpはbashの機能であってLinux独自のものじゃないことの指摘)
>/dev/tcpなんてデバイスファイルはない。
>これは Bashの機能。
↓
>>287 (見苦しい言い訳)
>バカ? こんな腐った機能を無効にしてる良心的なディストリもあるから犬板行けって言
ったんだよ。
>>287 と
>>285 とで、言ってることが自己矛盾してる。
>>286 の指摘を見てから言い訳を考えてるから、書き込みに15分以上もかかってるw
352 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 08:32:00
>>349-350 弱いお頭で必死に考えた妄想だけでは事実を捻じ曲げられない。
冤罪足利事件みたいに客観的事実と強弁できるソースを捏造しないとな。
お前が一昨日必死になっていた、「ソース出せ。」ってやつだな。wwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
> *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
使えてりゃ質問しねーんだよ。www
353 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 08:34:29
>>351 さて、渾身の反論に何分かかるか。まさか、15分以上はかからないよな。
お頭が悪いと墓穴を掘る。www
>>352 全然関係ないけど、
>お前が一昨日必死になっていた、「ソース出せ。」
って何のこと? 俺じゃないよ。
あと、Javaがどうこうのカキコもあったけど、それも俺じゃない。
356 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 08:44:06
>>354 朝からν即並みに張り付いて必死だな。www
何回リロードしたんだ。www
> 今のところ
>>349 >>350 >>351 に対しての反論がないので、
論破済みの戯言には反論する必要なし。
>>320 に反論出来てないのでお前の負け。www
これはお前が持ち出したルール。 お頭が弱いと墓穴掘る。wwww
>>356 >論破済みの戯言には反論する必要なし。
↑
どこにも「論破」されてないし、
「反論する必要なし」というなら、反論できないことを認めたんだな。
じゃあ、
>>356 は負けを認めたww
359 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 09:00:37
>>357 あれで反論のつもりかよ。www
「予想できる」を論破するには「100%有り得ない」事を立証する必要があるんだよ。
バカは何処までいってもバカだな。
お前が言い出したルールで、
>>320 に反論出来なかったお前の負け決定。www
360 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 09:01:54
バカ晒しあげの、お約束のコピペを忘れたぜ。 > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww 使えてりゃ質問しねーんだよ。www
361 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 09:06:45
>>357 お前が言い出したんだからお前は15分以内にレスしろよ。www
バカは墓穴を掘る。www
>
>>286 の指摘を見てから言い訳を考えてるから、書き込みに15分以上もかかってるw
>
>>286 の指摘を見てから言い訳を考えてるから、書き込みに15分以上もかかってるw
>
>>286 の指摘を見てから言い訳を考えてるから、書き込みに15分以上もかかってるw
>
>>286 の指摘を見てから言い訳を考えてるから、書き込みに15分以上もかかってるw
>
>>286 の指摘を見てから言い訳を考えてるから、書き込みに15分以上もかかってるw
>>351 も言ってるが、
>>285 (/dev/tcpはLinuxの機能だと誤解してる馬鹿)
>バカ? /dev/tcpだから犬板行けって言ったんだよ。
この発言が致命症だね。
「/dev/tcpだから犬板」とストレートに言ってる。
弁解の余地なし。
364 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 09:18:29
>>362 論理 wwww
「矛盾しない」事を理解できなかった知恵遅れが「論理」www
バカが気付かずに無効にした経験を持ち出して
> 知らずに無効になっている事はない。
に反論した気になってるんだ。www 笑う。www
この部分はバカを考慮すれば、
> 知らずに無効になっている事は少ない。
という事になるが、これでも
>>320 の論理は全く変わらない。
お前が言い出したルールで、
>>320 に反論出来てないお前の負け決定。www
366 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 09:39:35
>>351 は他人だと言い張りたいようだから、相手にしてやろう。
> 285の「バカ」は280に対して言っている。つまり、
正しい板に誘導済み、且つ、移動宣言が出ている質問に対して、レスしている
>>280-284 に対して言っている。
お前の論理wwww は
>>285 が/dev/tcpを知らなかったという妄想に全面的に
依存してるんだよ。www
/dev/tcpを知っていたなら(事実だからしょうがない)、
>>285 は何も矛盾しない。
>>363 も相手にして欲しいらしいな。
> 「/dev/tcpはLinux独自のもの」と思ってない人が
> 「/dev/tcpだから犬板」なんて言わない。
バカは繰り返さないとわからないようだが。
>>316 で論証済み。ディストリの問題だから犬板。
>>366 /dev/tcpがLinux独自じゃないと知っているのに
「/dev/tcpだから犬板」と言うことはありえない。
>
>>316 で論証済み。ディストリの問題だから犬板。
↑
本質はディストリの問題ではない。
正しくは「./configureの問題」
で、Linux以外のOSでも 「./configureの問題」として起こり得る問題。
だからLinux板への誘導は間違い。
で、Linuxじゃなくても objdump -T で確認できることを
>>319 あたりで指摘してる。
(これは、「ディストリの問題ではない」と言う主張)
以上で、
>>366 に書いてあることは論破されたので、
まだ反論のない
>>349 >>350 >>351 に対する反論 を早く書くように。
>>349 >>350 >>351 に対する反論が 15分以上ないので、(15分どころじゃないけど)
負けを認めたんじゃないの?
別に15分ルールにするつもりなんかないだろうけど、
>>356 自身がそれを「お前が持ち出したルール」とか言い始めたので。
369 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 09:55:39
>>367 「有り得ない」に対する反論は、「有りうる場合」を一つ示せば証明終了。
論理学の基礎の基礎の基礎。
やっぱり一昨日「矛盾しない」を最後まで理解できなかった低性能Java厨のようだな。www
>>369 その「一昨日」って何のことだよ。俺じゃない。
>「有りうる場合」を一つ示せば証明終了
って、
「有りうる場合」なんてどこにも書かれてないじゃん。
371 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 09:59:27
>>371 どこにも論破されてない。
そう言って逃げるのは反論できない証拠。
「論破済み」と言うなら、そのポインタを示すかコピペしてみろよ。
できないだろうけど。
373 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 10:06:05
>>370 ついに小学生並みの言いがかりしか付けられなくなったようだな。
「有りうる場合」とは確かに書いてないな。www
「言わない」に対する反論は「言う場合もある」事を一つ示せば証明終了。
これでわかるか? www
>>371 >>351 は「15分ルール」なんて言ってないよ。
「書き込みに15分以上もかかってる」から、言い訳に苦労したんだろう、
と言っただけ。
それを勝手に
>>353 あたりで 「15分ルール」みたいに言い出しただけ。
言い出したのは
>>353 の方。
>>353 自身が従う必要がある。
>>373 だから、その「有りうる場合」を具体的に書いてみろよ。
今までの議論の中では書かれてない。
まとめると、
「/dev/tcpはbashの機能であってLinux独自の機能ではない」
ことを知っている人が、
「/dev/tcpだから犬板」とは言わないし、
「/dev/tcpはbashの機能であってLinux独自の機能ではない」
ことを知っている人が、
「/dev/tcpだから犬板」という場合があるような合理的な例が
1例も示されていない。
よって、
>>369 の負け。
377 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 10:14:49
>>374 15分ルールを引っ込めたいのか? 特別に許してやっても良いぞ。
自ら言い出しておいて情けない奴だな。
>>375 メクラ?
>
>>316 で論証済み。ディストリの問題だから犬板。
>>377 >>316 は
>>319 や
>>367 で 論破済み。
よって、
「/dev/tcpはbashの機能であってLinux独自の機能ではない」
ことを知っている人が、
「/dev/tcpだから犬板」という場合があるような合理的な例が
1例も示されていない。
380 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 10:40:12
>>378-379 >>318 ,
>>319 ,
>>367 は反論たりえない。
>>318 > 元質問者の
>>277 はディストリもOSも言ってない。
元質問者が言及していない事は予想すればいい。 詳細は
>>320 /dev/tcpを知らなかったというのはお前の妄想。
>>319 結論(犬板への誘導)に対する言いがかり。「objdumpで確認できる」は概ね正しいが、
/dev/tcpを知らない事の論証にはならない。
>>367 特殊なバカのケースを持ってきて、
>>316 の結論(犬板への誘導)に言いがかりをつけ
ているだけで、/dev/tcpを知らない事の論証にはならない。
/dev/tcpを知らなかったというのはお前の妄想にすぎないんだよ。
>>380 /dev/tcpを本当に知ってる人が
「/dev/tcpだから犬板」とは言わない。
↑これがすべてwww
で、「有りうる場合」(そう言う場合)の具体例は? まだ書けないのか?
382 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 10:45:23
>>381 「ディストリの問題だから犬板」
何も矛盾しない。
>>366 >お前の論理wwww は
>>285 が/dev/tcpを知らなかったという妄想に全面的に
>依存してるんだよ。www
↑
とは言うが、「/dev/tcpを知らなかった」とすればすべて自然に説明が付くよね。
逆に「「/dev/tcpを知っていた」と仮定すると、すべてが不自然、
というか実際に論破されてるし。
よって、「/dev/tcpを知らなかった」が事実。
>>382 ディストリの問題ではなく、configureの問題。
で、ディストリもOSも関係なく回答できる問題。
で、実際UNIX板で回答して解決してるし。
(逆に誘導先のLinux板では解決していない)
384 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 10:54:31
>>383 不自然と言うのはお前の妄想。妄想だけで論破した気になっているおバカさん。
> で、実際UNIX板で回答して解決してるし。
> (逆に誘導先のLinux板では解決していない)
犬板が情けなかっただけ(見てないから知らないが)で、/dev/tcpを知らなかった論証にはならない。
お前の「論破」とやらはは全て妄想。
>>384 よくよめ。「不自然、というか実際に論破されてる」と言ってる。
387 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 11:00:56
>>385 良く読め、お前の「論破」とやらはは全て妄想。
>>387 反論するには具体的な反論を書き込むことが必要。
「妄想」とかいう言葉で誤魔化しても反論にはならない。
389 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 11:16:04
>>386 既に論破済みで
>>365 というから放置してたんだが、
>>365 が論破されるとまた蒸し返すのか?
>>349 >>350 >>320 で書いたとおり、*BSD,Solarisのコンパイル済みバイナリは/dev/tcpが使える。
従って*BSD,Solarisに関する質問では無い。質問の流れと関係の無い事実を持ち出して
もなんの論証にもならない。
>>351 > 「bashをいくら追求しても、Linuxじゃない限り/dev/tcpは使えない」と
> 思い込んでいる。
「/dev/tcpは使えない思っている」という妄想が前提の論証なので、反論不要。
391 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 11:20:26
>>387 「ディストリの問題だから犬板」
これに対するお前の「反論」とやらは「/dev/tcpを知らなかった」という妄想だけ。
>>389 最後の1行
>反論不要
つまり、反論できないことを認めたのですねw
393 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 11:23:30
>>391 よくよめ
「ディストリの問題ではなくconfigureの問題」
って、
>>367 とか、もっと前でも言ってるぞ。
ディストリの問題でない以上、Linux板への誘導は間違い。
395 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 11:25:40
>>392 ついに小学生レベルに落ちたか www
「する必要のない事」と「出来ない事」の区別はつけようね。
397 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 11:31:35
>>394 下らん言いがかりなので放置してたが、しつこいので
>>380 で論破済み。
全てはお前の妄想と言いがかり。
>>396 お前の妄想であって論破になっていない事は論証済み。
お前が論破したと妄想しているのはどのレスだ?
>>391 百歩譲って「ディストリの問題」だったとしても、
だったら、
「ディストリの問題だからLiinux板」と言うだろ。
実際には、
「/dev/tcpの問題だから犬板」と言ったのだから、
やっぱり「/dev/tcpはLinux独自」と思い込んでいたことになる。
400 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 11:49:16
>>398 > 百歩譲って「ディストリの問題」だったとしても、
譲らずとも真実。
> 「ディストリの問題だからLiinux板」と言うだろ。
お前の妄想にすぎない。
>>399 お前が「妄想」を並べ立てて論証した気になっているだけ。
お前の「論破」は、「/dev/tcpを知らなかった」事を前提にした妄想の展開が全てであって、
「/dev/tcpを知らなかった」ことの客観的証明は一切ない。事実ではないのだから証明出来るわけが無い。
つまり、お前の論破とやらは「妄想」。
>
>>365 に対する有効な反論はまだない。
お前が論破したと妄想してるのはどのレスだと聞いているのだ。笑ってやるから答えてみろ。
>>400 >> 「ディストリの問題だからLiinux板」と言うだろ。
>お前の妄想にすぎない。
↑
やっぱり、反論できないところになるといつも「妄想」ということにするよね。
お前が「妄想」という言葉を使ってるところはすべて「反論できません」の
降参のサインだと読み換えるよ。
402 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 12:00:10
>>401 > 「ディストリの問題だからLiinux板」と言うだろ。
このように、客観的証明を出来ない、お前の一方的な思い込みを「妄想」と言っている。
>>400 おまえ、もともとbashもLinuxも全然知らないんだろ。
知らないなら黙ってろが基本。
なのに、自分のFreeBSDに/dev/tcpが無いことから
/dev/tcpをLinuxのデバイスだと勘違いして、
駄目押しにbashのキーワードもあるから、
ただの嫌悪感のみでお前は「犬板行け」と書いてしまった。
それが間違いだとわかったのだから、
今度からbashとか/dev/tcpとか見ても、Linux板に誘導するなよw
>>402 本当に「ディストリの問題」と思っているなら
「ディストリの問題」と言うはず。
実際には「/dev/tcpの問題」と言った。
これが等価だと主張するなら、
ディストリ=/dev/tcp
の等式が成り立たなければならない。
明らかに成り立たない。
よって、
>>402 が言う一連のことはすべて論破された。
405 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 12:05:23
>>405 はいはい、また「妄想」←(オマエ定義では「降参」)の言葉を使ったねw
で、
>>404 にも反論してねw
407 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 12:29:31
>>406 これキャッカンテキ論証のつもりなのかね。笑う。www
> 本当に「ディストリの問題」と思っているなら
真実だし、そのように言った。
> 実際には「/dev/tcpの問題」と言った。
言っていない。「/dev/tcpだから」と言った。
前提が捏造なので、これ以下の主張は単なる妄想。
> これが等価だと主張するなら、
> ディストリ=/dev/tcp
> の等式が成り立たなければならない。
> 明らかに成り立たない。
「/dev/tcpだから」で練り直してみなよ。www
>>407 本当に「ディストリの問題だから」と思っているなら
「ディストリの問題だから」と言うはず。
実際には「/dev/tcpだから」と言った。
これが等価だと主張するなら、
「ディストリの問題」=「/dev/tcp」
の等式が成り立たなければならない。
明らかに成り立たない。
(余計に成り立たないw)
よって、
>>402 が言う一連のことはすべて論破された。
>>407 おお、足りないオツムで頑張ったようなので、相手してやろう。
論理学の等価とは二つの命題が共に真、もしくは共に偽の時に真となる演算だ。
「ディストリの問題だから」も「/dev/tcpだから」も命題になっていない。
よって、等価性を論じる事は不可能。
お前が論じたつもりになっているのは「文字列の同一性」。
わかる? www
410 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 12:46:21
おっと、レス番間違えちまったぜ。
>>408 おお、足りないオツムで頑張ったようなので、相手してやろう。
論理学の等価とは二つの命題が共に真、もしくは共に偽の時に真となる演算だ。
「ディストリの問題だから」も「/dev/tcpだから」も命題になっていない。
よって、等価性を論じる事は不可能。
お前が論じたつもりになっているのは「文字列の同一性」。
わかる? www
>>408 「ディストリの問題だから」と思ってる人が、
わざわざ言葉を変えて
「/dev/tcpだから」と言い替える客観的合理性が説明されてない。
断りなしに言葉を言い替えることができるのは、
その言葉同士が「同義」である場合に限る。
「ディストリの問題」と「/dev/tcp」は同義ではない。
よって、
>>410 は論破された。
412 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 12:59:13
>>411 > 断りなしに言葉を言い替えることができるのは、
> その言葉同士が「同義」である場合に限る。
お前の妄想世界ででっち上げたルール持ってくんなよ。www 小学生以下。www
論破完了。
>>412 また出た「妄想」、つまり、「降参」するんですねw
いずれにしても、この長いやりとりを見た人は
>>412 が /dev/tcpを理解してなかったと思うのは当然。
>>412 は「/dev/tcpを理解してた」と後出しで主張するが、
その根拠は結局示されなかった。
根拠を示せと何度言っても、返ってくる言葉は、
「妄想」と、「反論の必要なし」だけ。(反論自体はなし)
よって、
>>412 は論壊された。
論壊なんて日本語初めて見たw
415 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 13:07:38
妄想じゃないなら、このルールが一般的であるというソース出せよ。www > 断りなしに言葉を言い替えることができるのは、 > その言葉同士が「同義」である場合に限る。
416 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 13:15:35
>>413 お前が客観的論証なしに繰り返している戯言を「妄想」と言っている。
>>402 参照。
ところが、お前の論破とやらは、その殆どが「/dev/tcpを知らなかった」という妄想に
基づく戯言なので客観的に論証など出来るわけが無い。
今の状況を整理すると、
>>412 (/dev/tcpを理解してない人)
↑
は、100%の証拠で論破されてるが、
>>412 自身は「妄想だ」とか言って
認めようとしない、という状況。
で、100%の証拠に拘らず、状況証拠も含めて考えても、
>>412 が/dev/tcpを理解してないと思うに足りる証拠が多数すでに書かれていて、
圧倒的に
>>412 が不利。
100%の証拠については議論が硬直してるようだから、
状況証拠でもいいから
>>412 が/dev/tcpを理解していたと納得できるような
証拠を出してみろよ。
それがない限り、みんな
>>412 は/dev/tcpを理解していないと思ったままだよ。
横レスすまそ
>>416 は今までにbashで/dev/tcpを使ったことが(質問される以前に)あったの?
419 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 13:22:01
> 100%の証拠で
妄想を証拠と言っていいのは小学生だけ。www
> 状況証拠でもいいから
>>412 が/dev/tcpを理解していたと納得できるような
知らなかったはずだと主張するお前に客観的な証拠での立証義務がある。
このルールのソースはどうした? 妄想ルールと言う事を認めるのか?
おまえはまだ15分ルールの撤回はしていないから
>>415 から15分以内な。
> 断りなしに言葉を言い替えることができるのは、
> その言葉同士が「同義」である場合に限る。
>>419 ということは、状況証拠は出せない(実際には/dev/tcpを知らなかったから)と
認めるんだな。
あくまで状況証拠だから、それだけでは
>>419 はグレーゾーンだが、
「
>>419 が/dev/tcpを知っていた」という証拠がないし、
「
>>419 が/dev/tcpを知らなかった」という状況証拠が多数あるから、
疑いは晴れないままになるよ。それでもいいならこのままにしとけ。
>>418 にも答えてやれよ。
421 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 13:32:44
論点をすり替えるなよ。www
> > 100%の証拠で
> 妄想を証拠と言っていいのは小学生だけ。www
100%の証拠とやらはどれだよ。www
DNA鑑定の精度を超えている。www
妄想ルールのソースはどうした?
> 断りなしに言葉を言い替えることができるのは、
> その言葉同士が「同義」である場合に限る。
>>418 は流れを読まないバカのようだから相手にする必要は無い。
422 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 13:34:22
100%と言い切るからには、100%で有るという鑑定書もあるんだろうな。 バカはどんどん墓穴を掘っていく。www
>>421 >
>>418 は流れを読まないバカのようだから相手にする必要は無い。
もし/dev/tcpを使ったことがあるなら「ある」と一言答えられるよな。
やっぱり/dev/tcpを使ったことなかったんだww
知らない分野の質問には口をはさまないほうがいいよ。
424 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 13:40:10
> もし/dev/tcpを使ったことがあるなら「ある」と一言答えられるよな。 はい、妄想。
425 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 13:46:47
ほら、100%の証拠と鑑定書はどうしたんだよ。降参か? www
>>424 「妄想」=「オマエの降参」
>>425 100%の証拠の議論とは別に、状況証拠でいいから
>>425 の /dev/tcpに関する
知識レベルを聞いてるんだ。
このままだと
>>425 は /dev/tcpを知らずに「知ったか回答」「誤誘導」をしたという
疑いが晴れない。
100%の疑いではなくても、疑いがあることに変わりはない。
疑いが晴れてない状態でいいなら反論しなくてもいいよw
なんか荒れてるな。 しかし/dev/tcpってcygwinのbashでも使えるんだな。勉強になったわ。
428 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 14:00:04
>>426 100%の証拠があると言ったのはお前だぞ。 忘れたならアンカー打ってやる。
>>417 その100%の証拠と鑑定書出せよ。www
出したら答えてやるよ。www
>>428 おれは答えてなんか要らないよ。
/dev/tcpを知っていたという状況証拠を出すことは、
オマエ自身の利益になること。
それを答えられなかったらオマエ自身の疑いが晴れないんだから。
で、結局答えないのなら、
>>428 は/dev/tcpを知らなかったという疑い濃厚なまま
議論が打ち切られました、となる。
430 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 14:09:28
>>429 お前の論理
>>392 > つまり、反論できないことを認めたのですねw
でいくと、100%の証拠とやらは妄想だったという事を認めたのですねw
ことになるが、それで良いんだな? www
>>430 100%の証拠はすでに書いてる。(読み返せば済むこと)
で、そっちの議論は終ったので、
次に、
状況証拠レベルでさえオマエは出せないことを指摘してるんだ。
「
>>430 は/dev/tcpを知らなかった」という疑いが残ったままになれば
>>430 のプライドを潰すには十分だからね。
432 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 14:13:33
>>429 >>419 の通り、知らなかったはずだと言いがかりをつけるお前が証拠を出し
て立証する義務がある。しかし、100%の証拠とやらは唐桟ながら妄想のよう
なので、妄想を元にした言いがかりと言う事がこれにて判明した。
433 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 14:16:02
>>431 > 100%の証拠はすでに書いてる。(読み返せば済むこと)
どのレスだよ。100%であるという鑑定書は? アンカー位うったらどうか? www
>>432 >>433 100%の証拠は、
>>349 >>350 >>351 に対する反論が無かったという事実、
及びその関連レスすべて。
で、100%の証拠の件にかかわらず、
お前のプライドも潰れた。
なぜなら、お前は/dev/tcpを知っていたとか、使ったことがあったとかいう
状況証拠すら出せなかったから、疑われたままになってる。
お前は口ぐせのように「妄想」と言うが、
自分が正しいなら、他人から間違った妄想をされてるだけでも嫌なはずだ。
現在、お前は「/dev/tcpを知らない人」と「妄想」されてる。
これだけでもプライドを潰すには十分。
# 実際には妄想ではなく事実。念のため。
435 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 14:23:39
436 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 14:26:20
>>434 妄想を証拠と言っていいのは小学生だけ。ww
100%であるという鑑定書は?
> 現在、お前は「/dev/tcpを知らない人」と「妄想」されてる。
キチガイは妄想するのが仕事なので、お前が妄想しても何の痛痒も感じない。
437 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 14:27:29
訂正 × キチガイは妄想するのが仕事なので、お前が妄想しても何の痛痒も感じない。 ○ キチガイやバカは妄想するのが仕事なので、お前が妄想しても何の痛痒も感じない。
>>436 「妄想」してるのはおそらく俺だけではない。
おまえは「/dev/tcpを知らない人」と「妄想」されてても平気なのかw
それで十分だ。お前のプライドは潰れたな。
439 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 14:39:48
なんか、ここ最近、言葉遣いがあれてるよね。 そんなに仕事無いの?>Unix系
>>439 >>439 自身が墓穴を掘ってる。
>>283 で正解レスがあったのに、その意味を十分理解せず、
それより「後」の
>>285 で、再度Linux板へ誘導している。← これが間違い。
>>363 が指摘してる致命症発言を再度貼っとく。
>この発言が致命症だね。
>「/dev/tcpだから犬板」とストレートに言ってる。
>弁解の余地なし。
「妄想だ」と言うのは結構。「妄想」であっても
>>439 のプライドは潰れたのだから。
442 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 14:52:43
>>441 キチガイやバカは妄想するのが仕事なので、お前が妄想しても何の痛痒も感じない。
補足、
>>285 は、
>>283 の「/dev/tcpの機能がdisableされてコンパイル」を、
bashではなく、Linuxカーネルのコンパイルのことと勘違いしていた。
だからこそ、
>>285 で、
「Linuxカーネルのコンパイル時に設定する/dev/tcpの話だからLinux板へ行け」
と言う意味の発言をした
444 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 14:57:21
>
>>285 は、
>>283 の「/dev/tcpの機能がdisableされてコンパイル」を、
> bashではなく、Linuxカーネルのコンパイルのことと勘違いしていた。
と妄想した
>>443 が粘着して妄想を書き散らした。
キチガイやバカは妄想するのが仕事なので、お前が妄想しても何の痛痒も感じない。
ものすごいレス応酬を見たけど全部読み飛ばした
これだけ仲が良いんだから、メアドでも交換し合えば良いのになw
むぅ、たしかに
これは質問も出来ない。
/dev/tcp だけ読んだ でもCygwinじゃ使えなかったぜ!
>>285 に対する反例が出たよ。
>>450 が言うように、Cygwinでも/dev/tcpがdisableでインストールされてることもある。
>>285 がLinux板に誘導したのは間違い。
452 :
名無しさん@お腹いっぱい。 :2010/05/15(土) 22:07:32
>>452 よくよめ。
たとえ「妄想」だったとしても、お前のプライドは潰れてる。
実際には「妄想」ではなく事実だから、お前は100%論破されてる。
という、2段階の主張。
とりあえず、お前のプライドが潰れればそれでいいから、
「妄想」でもいいならそのままにしとけ。
たとえ「妄想」でも、「/dev/tcpを知らなかった人」と思われるのは
さぞかし悔しいだろうな。
初歩的な質問でアレですが foo='/hoge/spa ce.txt' というようにスペースが含まれるファイルがあったとして、このファイルのbasenameをクォートするにはどうしたらよいのでしょうか? echo "$(basename $foo)" だと spa になってしまうし、 echo $(basename "$foo") だと spa ce.txt (スペース1つ)となって、やはり spa と ce.txt が別トークンとして扱われてしまいます。 要するにダブルクォートをネストしたいということなのですが…
2chだとスペースが1つにまとめられちゃうんですね。 本当は foo='/hoge/spa___ce.txt' # _ はスペース のように、スペースが複数入っていると考えてください
456 :
名無しさん@お腹いっぱい。 :2010/05/16(日) 01:29:45
>>453 お前は「妄想」していると明言している。これが100%の証拠って奴だよ。www
その言い訳、惨め過ぎるぞ。www
アク禁らしいから、解除されたらまたからかってやるよ。www
15分以上あるから足りないオツムで必死に考えてろ。www
>>438 > 「妄想」してるのはおそらく俺だけではない。
>
> おまえは「/dev/tcpを知らない人」と「妄想」されてても平気なのかw
> それで十分だ。お前のプライドは潰れたな。
>>454 期待値がわからん。これじゃダメってこと?
$ cat a.sh
#!/bin/sh
foo='/home/spa ce.txt'
bar=$(basename "$foo")
echo "$bar"
$ sh a.sh
spa ce.txt
>>457 あ、変数を経由すればいけるんですね!
bar=$(basename "$foo")
ここでも外側にダブルクォートが必要だと思い込んでました。ありがとうございます。
アホな質問してすみません><
>>454 >>458 変数を経由しなくても行ける。
echo "$(basename "$foo")"
>>458 変数に直接代入する場合は外側のダブルクォートは不要。
変数を使わずに直接 echoなどの引数にする場合は、
外側にもダブルクォートが必要(
>>459 の方法)
ダブルクォートのネスティングみたいになるけど、
$( ) によって別の階層に分かれてるから、
エスケープとかなしにそのままダブルクォートを付けてOK。
もちろん、複数のスペースとかもそのまま保存される。
>>459-460 なん・・・だと・・・
ネストできるわけないと思ってました。何でも試してみないとだめですね。
これができるんだったら色々楽になりそうです。ありがとうございます!
>>460 へ〜、shのパーザー以外と頭良いな。 勉強になったわ。 bash限定という
事はないかな?
>>462 bash限定じゃねーよ。
ちなみに、$( ) の代わりに ` ` でもOK。
ちなみにv7shだと… foo='/home/spa ce.txt' で no space って言われるんだが、移植ミスなのか? 他の手段で入れれば"`"のネスト自体はできるけど
465 :
名無しさん@お腹いっぱい。 :2010/05/26(水) 00:18:56
ちょっと手が滑ってへんな事がおきた。 bashで $ cd // $ pwd // どういう意味だろう? 3つ以上だと1つになる $ cd /// $ pwd /
//がネットワークルートを表すOSがある。それへの対応コードだろう。 emacsも同様に//を知っている。
初心者です。 キーボードからの入力待ちの際、tab保管を有効にするにはどうしたらよいでしょうか? #!/bin/csh set file = $< echo "ファイルは $file だよ" 上記のようなとき、filec+autolistのような挙動をしてくれることを望んでいます。 今日はじめてcshが駄目な事を知ったので、/bin/shでないことは御容赦ください・・・。 よろしくお願いします。
>>467 #!/bin/bash
read -e file
echo "ファイルは $file だよ"
469 :
466 :2010/06/04(金) 00:34:58
>>467 さん
bashならできるのですね(ググったらdash、zshとかいうのでもおkなのかな)。
人から貰ったcshスクリプトと組み合わせて使うため、
最初はbashスクを使ってasciiファイルに書き出してから、cshスクで読むとかになりそうですが
ゆくゆくは貰ったcshも全部bashに書き換えたいと思います。
ありがとうございました。
470 :
467 :2010/06/04(金) 00:43:13
$name++
>>468 さんでした。
失礼しました。
そこまでcshを嫌う必要はないだろう 簡単なものならcshの方がいい場合もある
質問です。 以下のソースでは入力がhogeかそれ以外の文字列の場合は期待通りに動くんですが、文字列を入力しなかった場合は line 6: [: =: unary operator expected とエラーが出ます。これはどうやれば防げますか? #! /bin/sh echo "input? " read i if [ $i = "hoge" ]; then echo "input is 'hoge'" else echo "other" fi
"$i"
476 :
名無しさん@お腹いっぱい。 :2010/06/15(火) 23:04:34
1ヶ月の最初の日曜日を表示させるには・・・・・・ なんかいいコマンドありますか? find /var/www/data -name hoge を毎月1回最初の日曜日に実行して インデックス作りたいんす
cronで日曜に起動して日付が7以下かどうか調べれば? 逆でもいいけど。
0 0 1-7 * * [ "$(date +%a)" == "Sunday" ] && command -args こうですか?
>>476 date -d `date +%d`' days ago 1 day next sunday'
>>477 それをやりたくないから質問してるんだろ
>>477 その発想はいいですね、考え付きませんでした
>>479 days ago ですか!date は奥が深いですね
いろいろとありがとうございますたー!
>>476 これじゃだめ?
cal ${month} ${year} | awk '/^ ?[0-9]+{print $1}' | head -1
>>481 ありがd
>>479 と at を使って何とかなりますたたた
cal って便利なんだけど awkで整形して使うのは面白い技ですね
みなさんいろいろ技があるんですね、勉強になります
そろそろCも覚えなきゃなぁ
やることいっぱいですorz
>>479 こんな環境もある
% date -d `date +%d`' days ago 1 day next sunday'
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format]
%
>>484 いあ FreeBSD. つか, *BSD 全部だと思う.
つか, GNU 拡張 date じゃないと通らへんちゃう?
days ago なんて知らないと思ったら拡張date だったのですか うちのCentOSでは動いてしまったので気付かなかったw あとで会社のFreeBSDで試して見ます(ヲ
FONに入れたOpenWrtからTwitterに投稿したいためだけに シェルスクリプトでOAuth認証できるクライアントを書いたw Perlとか入れなくても標準環境にopensslとcurl入れるだけで動くからいいわ
BSDだったら-vの組み合わせで何とか出来そうですね。手元に環境ないから 試せないけど。
ubuntuでifconfig eth0のMACアドレスを":"を"-"に変えてMACアドレスのみ表示したいのですがどのようにすればよいでしょうか? 初歩的な質問で申し訳ありません。
>>490 ifconfig eth0 | sed -n '/.*HWaddr /{s///; s/:/-/gp}'
ありがとうございました。 Linux板で聞くよりこっちで聞く方が早いですね。
494 :
名無しさん@お腹いっぱい。 :2010/06/20(日) 23:49:41
2ちゃんに自動的に書き込むようなスクリプトは既出ですか nc辺りで書こうかと思うのだけど
>>495 根性試しでないならcurlとか使えばいいんじゃね?
やっぱ/dev/tcp(笑)だろ
499 :
名無しさん@お腹いっぱい。 :2010/06/27(日) 01:04:50
wc -lで行数求める場合って、なんで先頭にタブ(空白かも)が入るんだろうね。 おかげで、-eqで比較しようとしてもちゃんと比較できなかったりして困るんだよね。
>>499 awk '{print $1}' とかで切り出せば余分な空白は無くなる。
$ test ' 0' -eq 0 && echo EQ EQ
>>499 GNU wc は、wc -l とか wc -c とかの時、余分な行頭スペースは入らない。
>>500 awkなんか使わなくても、
[ `wc -l < file` -eq 123 ]
でいいだろ。
"`wc -l .. `" じゃなくて単に `wc -l ...` にする。
>>501 シェル依存。
$ test ' 0' -eq 0 && echo EQ
test: 0: bad number
初歩的な質問だと思うんですが bashでテキストファイルで空欄があるところを改行に変換するシェルスクリプトを作りたいんですが どうすればよいでしょうか?
まず服を脱ぎます
#!/bin/bash man tr < file.txt ってやってみましたが、動作が変です。
いいから man tr しなよ。
こうですかぁ?? ↓ ---- #!/bin/bash いいから man tr < file.txt ----
粘着キチガイ犬はこのスレにも粘着してるのか?
相手すんな。
513 :
名無しさん@お腹いっぱい。 :2010/07/27(火) 03:09:25
初歩的なものですみません。 #!/bin/bash hostname $hostname = `hostname` echo $hostname 上記のシェルスクリプトを実行すると hostnameだけの行はしっかり標準出力にホスト名が表示されるのですが、 $hostname = `hostname`で command not foundと怒られてしまいます。 なぜでしょうか・・・?
すみません・・・。 #!/bin/bash hostname hostname = `hostname` echo $hostname でした。結果が = とだけ表示されてしまいます。標準出力の結果が変数に入っていないのでしょうか
hostname=`hostname`
>>515 ありがとうございます。解決しました。
いろいろやってたら、間違ってhostnameに=を設定してしまっていたことも重なっておりました。
518 :
名無しさん@お腹いっぱい。 :2010/07/28(水) 21:03:26
xargsの-Pオプションってありますよね。 マルチコアの上で動かすときに重宝しています。 しかし、例えば for i in *.jpeg do convert $i `basename $i .jpeg`.png done のような多少複雑な操作をxargs -Pのような形で簡単に並列実行することはできるでしょうか? "args"だけでなくてリダイレクトにも使用できることを望んでいます。 # 普段はzsh使ってるので for i in *.jpeg; convert $i $i:r.png とか書いてますが zargsのような、zshに依存するやり方でも構いません。 ご存知でしたら教えていただければ幸いです。
>>518 単純にバックグラウンドで、
for i in *.jpeg
do
convert $i `basename $i .jpeg`.png &
done
wait
でいいんじゃないの。
それよりスペースや特殊記号入りファイル名の対応の方が気になる。
それってファイルが何千とあったら醜い事にならんか?
>>519-520 ありがとうございます。
変換する元のファイルも基本的に自分で作成するつもりなので、
ファイル名は「行儀のいい」ものと仮定して、スペースや特殊記号は特に意識していませんでした。
その代わり、ファイル数は100?のオーダーを考えているので、
バックグラウンドに全部一気に詰め込むのではなく、
最大並列プロセス数を与えて、その数だけ常に動かしつづけてくれる仕組みが欲しいのです。
>>521 すみません、文字化けしてます。
×ファイル数は100?のオーダー
○、ファイル数は100 - 10000のオーダー
です。
523 :
518 :2010/07/29(木) 13:56:52
とりあえず自己解決しました。 zsh依存ですが、例えば function jpeg2png(); convert $1 $1:r.png zargs -P4 -n1 -- $(echo *.jpeg|sed -e 's/ /\n/g') -- jpeg2png とか。 ワンライナーで書きたかったのですが、これ以上にいいやり方ありますかね。 あと、$()の中が若干不細工ですが。
コマンドラインのオプションはgetoptsで処理しますが、--を先頭に付けた 複数文字のオプションの処理はどのようにやるのが一般的なのでしょうか?
誘導されてきました。 プログラムで質問があります。 /hoge/test/ の中に 1filename1.gif 1filename2.gif 2filename1.gif 2filename2.gif があるとします。 # sh /hoge/test/*filename* という感じにコマンドを入力すると それらの複数のファイルが command /hoge/test/1filename1.gif -option /aaa/bbb/1filename1.jpg command /hoge/test/1filename2.gif -option /aaa/bbb/1filename2.jpg command /hoge/test/2filename1.gif -option /aaa/bbb/2filename1.jpg command /hoge/test/2filename2.gif -option /aaa/bbb/2filename2.jpg って感じにファイルが無くなるまで全て、コマンドを実行したいのですが どうすればいいのでしょうか??
>>525 for f in "$@"
do
echo command "$f" -option "${f%%.gif}".jpg
done
527 :
524 :2010/07/31(土) 12:29:25
自己解決しました。
回答しようと思ったけど自己解決したようだからやめるね
getopt_long
それはC型言語
531 :
524 :2010/07/31(土) 14:39:07
getoptに-lオプション付けて使うんですよね。 これって常識でしたか(笑)。
でも、getoptを使うとスペース入りのファイル名がうまく扱えなくなる問題があるんだよね
533 :
524 :2010/07/31(土) 14:48:53
-oオプションを付ければ良いようですよ。 それと$@なんかは"で囲う必要あり。
BUGS Arguments containing white space or embedded shell metacharacters generally will not survive intact; this looks easy to fix but is not.
535 :
名無しさん@お腹いっぱい。 :2010/08/08(日) 20:39:19
質問です。
リスト化したファイルを読み込んでfind検索の後、圧縮かけて削除
処理させるスクリプト書いているのですが、どう書いて良いのか??
1)/home/hoge配下に、sample.lstと言うファイルを作成
2)(1)のリストを読み込んで、最終アクセスが7日経過しているファイルを検索
3)(2)に該当したものを圧縮して、元ファイルを削除する。
/*リスト化ファイル内*/
/home/aaa/abc
/home/bbb/abc
/* バックアップスクリプト*/
#!/bin/sh
BACKUPLIST=/home/hoge/sample.lst
FIND=`find $BACKUPLIST -type f -daystart -atime +7 `
tar cvzf `date +%Y%m%d`.tar.gz $TARGET && rm $TARGET
もちろん、上記では色々と問題がありますがこう言う風な処理をしたいと。
http://centossrv.com/backup.shtml ここの処理に、find検索の処理を追加
出来れば解決なのですが・・・。
失礼、上記スクリプト内 FIND=`find $BACKUPLIST -type f -daystart -atime +7 ` tar cvzf `date +%Y%m%d`.tar.gz $FIND && rm $FIND でした。
>>535-536 find [パス] [検索条件] -exec tar -czf $(date +%Y%m%d).tar.gz {} + -delete -print
-exec + でも、tarは複数回実行されうるんじゃ? rやuじゃなくcで作ってるとはじめのほうのは失われてしまわないかね?
>>538 ごめん、全然ダメだった
>>537 実行すると超危険なので実行しないで!
まじでゴメン><
540 :
>>535-536 :2010/08/08(日) 21:17:11
>>537 アドバイス有難う。
でも、パスにfind $BACKUPLIST ・・・と書くとリストのパスを参照して
中身を参照検索してくれない。
単純にパスを指定すれば、うまくいくのだが???
find /home/aaa/abc ・・・で
>>538 findの所はループ処理だ回さないと駄目なのでしょうかね??
>>539 危ない、まだ実行していないので大丈夫wwww
$BACKUPLISTの中身が/home/hoge/sample.lstなので find /home/hoge/sample.lst ...が実行されちゃう find $(< $BACKUPLIST) ...しないとダメだね
542 :
>>535-536 :2010/08/08(日) 21:52:07
>>541 レス有難う。
試しに、実行させたらとりあえず動いたんだが
tarの処理でエラーが出た・・・。
tar: 処理中にエラーが起きましたが、最後まで処理してからエラー終了させました
一応、圧縮は出来ているようだけど。
後、可能であればで良いのですが圧縮元を/home配下からではなく
abcフォルダ配下から圧縮出来ればベストなのですが。
一旦cdで/home/abcフォルダに移動しないとやっぱり駄目なのかな??
少々問題が発生したけど、動いたのでスクリプトを整理します。 #!/bin/sh BACKUPLIST=/home/genki/backup/sample.lst FIND=`find $(<$BACKUPLIST) -type f -daystart -atime +7` tar cvzf `date +%Y%m%d`.tar.gz $FIND && rm $FIND tarの際、全角ペースが入っているファイルがエラーになってバックアップ 取れなかった以外は、ほぼ思っている処理が出来ました。 tar: ドキュメント.txt: stat 不能: そのようなファイルやディレクトリはありません tar: 処理中にエラーが起きましたが、最後まで処理してからエラー終了させました 本来なら、新規 ドキュメント.txt と言うファイルがあるのだけど・・・。
失礼、パスが間違ってた・・・・。 BACKUPLIST=/home/hoge/backup/sample.lst
>>542-543 えっと、リストは絶対に必要なのかな?
スクリプト内に書いとくのでは駄目なのか
ファイルから読み込むとなると、どうしてもループさせることになるので色々と困るのだが…
>>543 のように空白含むパス名の扱いにも問題が出る
BACKUPLIST内のディレクトリの数が数千とかじゃなければスクリプト内に書いたほうが楽
/home/abcってのはちょっとよく分からない
>>535 では/home/aaa/abc、/home/bbb/abcの2つのディレクトリがあるようだけど
アーカイブを2つ作りたいってことなのかな
546 :
>>543 :2010/08/08(日) 22:42:51
>>545 なるべく、リスト内で処理したいです。
理由は、数千もディレクトリは無いにしろ数十・数百あるとかなり厳しいです。
後、スクリプト内を簡潔にしたいのもあります。
でも、
>>545 の言う通り数十・数百位のディレクトリならスクリプト内に
書いた方が楽なら、そちらの方がベスト!?なのかも・・・・。
確かに、両方abcとあるので分かりにくいので/home/aaa/test1と/home/bbb/test2
なら大丈夫ですかね??
/home/aaa/test1配下と/home/bbb/test2配下にあるものを1つのアーカイブで
まとめたいって事です。
書いてみた #!/bin/bash # ${HOME}以下の相対パスを書く l=("foo bar/" "hoge fuga/") cd ~ mkfifo tmp.fifo find "${l[@]}" -type f -daystart -atime '+7' \ -exec tar -cvzf $(date +%Y%m%d).tar.gz {} + -fprintf tmp.fifo '%P\n' & while read f; do rm -f "${f}"; done <tmp.fifo rm tmp.fifo 本当は素直にfindを2回かけて-exec tar、-deleteすればいいんだけど 条件に-atimeが入ってるので1回目と2回目のfindの結果が変わっちゃう (findではatimeは変わらないけどtarすると変わるらしい) なのでnamedpipeを作ってrmをwhileで回すという面倒臭いことをしてる 削除するファイルが増えればそれなりに遅くなるはず 誰かもっと良いやり方あれば教えてください find一発で出来ないものか
>>546 それじゃあ、ひと手間増えるけど
#!/bin/bash
backuplistfile="${HOME}/backuplist"
fifo="/tmp/backup.fifo"
while read p; do backuplist=("${backuplist[@]}" "${p}"); done <"${backuplistfile}"
cd /home
mkfifo "${fifo}"
find "${backuplist[@]}" -type f -exec tar -cvzf testbackup.tar.gz {} + -fprintf "${fifo}" '%P\n' &
while read f; do echo rm -f "${f}"; done <"${fifo}"
rm "${fifo}"
で、backuplistにはaaa/test1等と書いておけばいい
面倒だなぁ…俺てっきり
>>537 で行けると思ったのに
>>547 スクリプトthx
とりあえず、なにかベストなやり方をもう少しググってみます。
他にもっとベストなやり方があればアドバイスよろしくお願いします。
>>548 同じくスクリプトthxです。
明日ちょっと、実行させてみます。
結果はまた報告します。
-fprintfの%Pは%pの間違いでした、ごめんちゃい
cpio や pax でも tar 形式のアーカイブは作れるということは知っておいていいと思う。
554 :
名無しさん@お腹いっぱい。 :2010/08/09(月) 17:37:58
bash の for xxx; do xxx; done のループで、 ループから脱出(break;) したり、次の周回に飛ぶ(continue;) には、 どうするのがよいのでしょうか。
普通にCと同じようにbreakとcontinueが使えるよ
>>554 自分で答え書いてるじゃん。
break とか continue とか実行すればいいだけ。
むしろ一気breakが出来て便利だよな。
起動時のスクリプト実行時に、USBの認識が間に合わないようなので、 mountの実行を5秒程度スクリプトのなかで遅らせたいんですが どのようにすればよいですか?
sleep 5
560 :
558 :2010/08/10(火) 22:45:52
>559 どうもです
GNOMEのエディターで編集やってたりして
いいえ、サンバでメモ帳です
>>561 起動スクリプトにsleepが入ってるのは良い設計ではない。
>>564 まあ、RHELでもこんなもんだ:
$ grep sleep /etc/init.d/* | wc -l
37
ubuntuはSys V initを捨てたからここらへんは掃除されてるのかな? だれがgrepしてみて。
>>565 それ、whileループ中で、あるコマンドを実行し、失敗した時のみ
sleepしてからリトライするという記述がメインなので、
通常時はsleepは実行されないし、問題ない書き方なんだよ。
>>568 そう思うだろ?
実際見てみると、正常ルートなのに笑えるほど寝てるぜ。
ウザス
>>569 確認したけど、1番目の起動スクリプトが実行開始されてから
最後の起動スクリプトが終了するまでトータルで1秒未満なので、
sleepは1度も実行されてない。
OS起動時は、起動スクリプトの速度はネックになってなくて、
むしろ、カーネル自身のデバイス認識部分とかに時間がかかってる。
>>571 [OK]
[OK]
・
・
・
・
が1秒以内に終わる・・・?超進化してるな。
それよりも、rcスクリプトを捨ててSMFに改良したはずなのに、 未だに起動が激遅なSolarisを何とかしてください。
>>574 非同期処理の終了をタイミングで取る→機種依存
>>575 単純にsleepで待ってるんじゃなくて、実際にはこういう処理だよ
↓
while ! command
do
sleep 1
done
どこにも機種依存要素はないし、
この処理で sleep を外したらそれこそ busy loop で重くなる。
>>576 >どこにも機種依存要素はないし
こいつアホ(AAry
rcスクリプトなんて、そもそも環境依存するもんだろ
>>579 ここで言う機種依存といのはハードウェア構成依存という事だろう。
>>580 それは分かってるんだが。
大量に同一用途のサーバー管理するんでもなきゃ、
わざわざ可搬性を考慮するのなんて、バカバカしいよ。
>>583 何イライラしてるんだよw
sleep同期君
ハードウェア依存の問題を回避するためのworkarroundとしてsleep入れるんじゃないの? 別に問題ないと思うけど。
アンチsleep君の主張はよくわからんな そもそも非同期処理じゃないし…
SMFやrcngのような同期をとる機構がないのがクソと言いたいのだろう。
この文脈でなぜSMF? あれはタイマ割り込み使って音源鳴らしてるだけだろ。
この文脈でSMFと言ったら、Service Management Facilityに決ってんだろ。
GNU sleepだと sleep 0.001 とかできるから、 SMF再生するシェルが書けそうだな。
シェルってゆうな。クズ。
Makefileのなかで、tarコマンドを使いたいんですが、うまくいきません 単純に tar directry/faile.tar tergetdir/ としてみたんですが
>>592 シェルと関係ない話は別スレでやれよ(Makefileとも関係ないし)
まあ、f と -C オプションが落ちてるのが原因だけどな。
なんでこのスレ選んだんだw
directry faile terget 英語初心者スレが適当だね
まぁ、ファイル名は別にどうでもいいと思うが オプションがないね man tarオススメ tar cf foo.tar bar tar cfz foo.tar.gz bar tar cfj foo.tar.bz2 bar
tar作成じゃなくて、展開じゃないの?
598 :
592 :2010/08/20(金) 21:29:35
すいません tar xvfp directry/file.tar tergetdir/ でした
Makefileにターゲットもなくいきなりtarコマンドを書いたと見た。
601 :
592 :2010/08/20(金) 22:26:50
shine
シャイン? 輝けって?
604 :
名無しさん@お腹いっぱい。 :2010/08/23(月) 22:07:15
OS:FreeBSD passwd(1)をシェルスクリプトでバッチ的に流すにはどうすればいいのでしょうか。 2回聞かれるところとかが、どう書けばいいのかわかりません。 お願いします。
>>604 標準ツールじゃないけど、expect使ってみるとか。
>>604 chpasswdってBSDには無いの?
pw コマンドで -h 0 とすると標準入力からパスワード読み込むよ。
608 :
シェルマスター :2010/08/28(土) 00:16:37
シェルスクリプトをシステム管理に活かすなら、 お前らならどんなシェルスクリプトを作る?
手作業でやってる作業のうち、繰り返しやるものを折りを見てスクリプト化してくだけ。
起動時に毎回することを自動化
ちょっとした単発のデータまとめとかの下処理用。 ログをcsvに整形してExcelのオートフィルタで分析とか。
以下のようなシェルスクリプトを用いて1つの端末にタブで複数のプログラムを動かすってのをやってます。 ただ、これだとプログラムが終了したりするとタブが閉じちゃうので、終了した後でもまたそこから コマンドが打てるように改変したいのですがどのようにやれば良いのでしょうか? #!bin/sh gnome-terminal \ --tab --working-directory=`pwd`/hoge/ -e "command" \ --tab --working-directory=`pwd`/foo/ -e "command" \ --tab --working-directory=`pwd`/bar -e "command" \ 一応ググってみると gnome-terminal -x bash -c "command1; command2; exec bash" こんな表記を使うとその後もコマンドを受け付けるみたいなのですが、 上のスクリプトとの組み合わせ方が上手くいかず、タブが起動しなかったりプログラムが起動しなかったりします。 OSはUbuntuなのでシェルはbashになると思います。お願いします。
>>612 gnome-terminal -e 'bash -c "command1; command2; exec bash"'
614 :
名無しさん@お腹いっぱい。 :2010/09/01(水) 17:51:34
複数のプロセスを切るときに、いちいちコマンドでひとつづつ切るのが面倒です。 そこで、シェルで一気にプロセスをきりたいのですが、どのように記述すればいいですか?
zshなら kill -KILL {1..99999} みたいな? たぶん argument list too long とかいわれるんで、分割いるけど。
pkillとかか? 使えるかは環境によるけど。
617 :
名無しさん@お腹いっぱい。 :2010/09/01(水) 19:55:10
説明ぬけててすみません。 そうですpkillです。 であとシェルの種類はbashでやりたいんです。 んで流れ的には612のように、1つの端末にタブで複数のプログラムを動かします。 んで複数のプログラムのプロセスをシェルを実行するだけですべてを切りたいんです。 そのようなシェルを作るにはどうすればよいですか? ちなみに環境はubuntu10.04です
>>617 おまえ
>>612 か?
>>613 には礼なしかよw
>>613 はできたんだな?
だったら、pkill -HUP gnome-terminal とかすれば、
その gnome-terminal から派生したプロセスは(普通は)まとめて終了する。
ただし、個々のプロセス側でシグナルを無視してたり、
setsid()とかで別セッションを開始してる場合(デーモン類等)は
終了しないけど、これは仕方ない。
シェル作っちゃう人だし
killすることを「切る」って言うもんなん?
うまい事言うなと思ったが単に変換エラーかもしれんなw
>>619 >シェル作っちゃう人だし
えっ? ここの住人は自分でシェル作れないんですか?
ネットからのコピペ(+改変)専門ですか?
シェルスクリプトスレだからね。 シェルスクリプトは書けるけど、シェル作れる奴なんてここにはいないよ。
>>623 難しく考えずにまずは自分でシェル作ってみたら?
ハローワールドのシェルなんてたった2行で作れるよw
ネタはいいから。
>>624 その2行のソース読ませてくれない?
何万文字で2行なんだ?
2行だとこれで終わりなんだけど。 #include <stdio.h> #include <stdlib.h>
シェルを書いても「スクリプト」で使うことはないなぁ。 スクリプトにするならperlだし。 シェルはスクリプトにはせずにコマンドとして使う。
>>626 70文字で2行だよw
#!/bin/sh
while echo -n 'myshell> '; read line; do eval "$line"; done
>>629 オマエくらい知能が低く生まれたかったわ
マヌケな2行でご満悦か
毎日幸せだろ?ww
だよな。 whileの後に echoなんて書いても動くわけないし、 doより前に ; なんて書いてるからここでエラーになるはず。 試さなくてもわかる。
見下したつもりの相手よりレベルが低いって……。
>>631
$ cat 2sh.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/wait.h> #include <sys/types.h> #include <unistd.h> void child(int argc, char **argv); int main() { int argc, n = 0; int status; char input[10000], *argv[256], *cp; const char *delim = " \t\n";
while (1) { ++n; printf("[%s@2ch]$ ", getenv("USER")); if (fgets(input, sizeof(input), stdin) == NULL || input == 4) { exit(0); } cp = input; argc = 0; while (argc < 256) { if ((argv[argc] = strtok(cp,delim)) == NULL) break; cp = NULL; argc++; }
if(strcmp(argv[0], "exit") == 0) { exit(0); } pid_t pid = fork(); if(pid == -1) { perror("fork"); exit(1); } else if(pid == 0) { child(argc, argv); } else { wait(&status); } } } void child(int argc, char **argv) { execvp(argv[0], argv); }
おまいらって変なとこで意固地になるよなw
てゆーか、 input == 4 ← inputは char *型なのに とか、 execvp(argv[0], argv) の引数が足りないとか、 間違いがあるとネタにもならんな。
シェルぐらい1行で書けよw int main(){char b[256];while(printf("hoge> "),gets(b)){system(b);}return 0;} コンパイル、動作確認済み。warning無視
万能ソース #include </dev/tty>
634涙目w
/bin/sh のラッパーである system() を使って 「シェルできました」と言うのはちょっとなぁ。
ここはシェルスクリプトスレなんで シェルを書く話はよそでやってください。
>>642 じゃあ、system()なしで書いたよ↓
main(){char b[256];while(printf("hoge> "),gets(b)){fork()?wait(0):_exit(execlp(b,b,0));}}
>>644 とんちやってるんじゃないんだから、exec系も無しだろう。
>>645 は実際のシェルはexec使わずに実装されてるとでも思ってるのだろうか
printf("hoge> "),gets(b) カンマ区切りの実行順は確定だっけ?
カンマ演算子は左が先。 関数引数のカンマで区切られた各項の評価順序は不定。 「副作用完了点」でぐぐろう。
そんなに上げ足とらなくても、シェルスクリプトとシェルの誤用くらい文脈でわかるだろ。 SQL ServerをSQLって呼ぶのに比べりゃ大したことない。
じゃあPC98をさして一太郎といってもいいんですか?
そもそも誤用でもないし
俺は50ccATミッション車を総合的に「ラッタッタ」と呼ぶ。 異論は認めない
俺は JIS規格のステープラのことを総合的にホッチキスと呼ぶ 異論は認めるw
俺は、白い綿シャツを「ホワイトシャツ」と呼ぶ、ネイティブな 発音は認めない
もういいです。
俺はPCなどのコンピュータハードウェアのことをミシンと呼ぶ(サーバーミシン等) 縫製機械のことを連想してしまうやつは認めない。
うちのおかんはゲームコンソールは全てファミコンという
for file in * do mv "$file" "${file/hoge/piyo}" done
662 :
名無しさん@お腹いっぱい。 :2010/09/06(月) 20:48:12
同時に8スレッド走るCPUで大量のシェルスクリプトを実行したくてxargsつかっているのですが、 うまく動かなくて困っています。分かる人教えてください。 やりたいことは、数値計算の実効シェルスクリプト(300個くらいある)を同時に最大8個走らせ、 一つ終了したら次が始まるようにしたい。 args.listファイルにシェルスクリプトの絶対パスを1行ずつ書き並べて xargs --arg-file=args.list --max-procs=8 -L 1 としましたが、topコマンドで確認しても全く動いている気配がありません。 クラスター用のjobマネージャは使わず、あくまでlinuxで一般的に使えるコマンドで済ませたいです。
犬板に(・∀・)カエレ!!
>>662 --arg-file はあくまで「引数」リストだから。
実行するシェルスクリプトを書き並べても引数になるだけで実行されない。
実行するには xargsのコマンドとしてシェルを書かないと。
xargs --arg-file=args.list --max-procs=8 -L 1 sh
そんなに時間が惜しいなら、最低限LLでやるべきだろ。
666 :
662 :2010/09/07(火) 01:41:39
おお、できました!
自分も引数リストであることは引っかかっていたのですが、どう解決すればいいか分かりませんでした。
ありがとうございました。
>>665 これは私に対するレスですか?LLというのはAWKとかParlとかのことですか?
『LLを使うと時間短縮になる』というイメージが湧かないのですが、具体的にどんな方法があるんでしょうか?
実際Perlとかで書いてみて時間計って、 シェルスクリプトと比べてみるといいよ。
>>664 > シェルを書かないと。
↑シェルを書いちゃう回答者現るw
shってシェルじゃないの?
そこはシェルでおけ
>>669 一般的な呼び方だと、ボーンシェル、Bシェル(ビーシェル)と
呼ぶんで、シェルとは呼ばない。
指定したシェルスクリプトを実行するシェルなんだからいいじゃんか そのうちshと想定して回答しただけだろ 字面で反応した恥ずかしいミスを指摘されてキョドるなよ
> 数値計算の実効シェルスクリプト(300個くらいある) これって「数値計算」をシェルスクリプトでやってるのかなあ?
675 :
666 :2010/09/07(火) 12:30:37
>>667 科学計算についてどの程度知った上でのレスでしょうか?
300個ある実行シェルスクリプトは全て、中でFortranのプログラムを呼び出しているだけです。
シェルスクリプトは初期値や環境変数の設定に使うだけであって、それで数値計算しているわけではないです。
『Perlで書いてみて』というのは、具体的にどの部分を言っているのですか?
676 :
666 :2010/09/07(火) 12:32:32
レスがかぶった。
さー 情報後出し祭りに突入してきましたよ
情報後出しじゃないだろ
>>662 の質問は
>>664 で解決してる。解決報告は
>>666 質問の解決後に
>>667 の Perl厨が余計なことを言い出した。
それに対する反論として
>>675 が書かれただけ。
Perl厨はきっと今ごろ赤面w
>>678 そうか?
別に深く追求しないで
「単純に時間を計って比べてみな」ってだけなんだから
「現状が速いです」で済む話なんだが?
>300個ある実行シェルスクリプトは全て、中でFortranのプログラムを呼び出しているだけです。 なんで、ここもプログラムにしないの? 普通は、函数化はしてあるだろうから、それを呼び出すようにするだけじゃん。 わざわざシェル経由して、xargsでこねくり回す意味がわからんわ。 完全に情報後出しの下手ないい訳だなw
>>680 よくよめ
xargs使うのは、-max-procs=8 を指定したいから。
同時に動くプロセスを常に8個に保った状態で回したい。
これはFortranだけではできない。
-max-procs=8については最初の質問の
>>664 に書かれている。
全く持って「後出しではない」
>>680 >普通は、函数化はしてあるだろうから、それを呼び出すようにするだけじゃん。
↑
それを呼び出すようにするだけだとシングルスレッドにしかならないよ。
8スレッド使いたいという質問だったのでは?
だから、並列化の部分のところを含めてプログラムにすれば? と、言ってると思うんだが? >>これはFortranだけではできない。 数値計算の並列化なんて、Fortranの最も得意とするところじゃん。
>>680 特定のパラーメータ振ったデータを生成して、fortranの解析プログラムを起動する
スクリプトなんだろ。そもそもそういう解析プログラムはコマーシャルソフトや別
部門が作ったソフトの場合が多く、それを呼び出すようになど出来ない場合が多い。
他にも、解析プログラムに、汎用でない特定の用途のパラメータ振りを組み込む事
は嬉しくないから、スクリプトで対応する可能性もある。
>>662 を読んでその程度を推測できないアマチュアはネチネチと絡むんじゃねーよ。
>>683 >>これはFortranだけではできない。
>数値計算の並列化なんて、Fortranの最も得意とするところじゃん。
話をすり替えてはイカン。
数値計算の並列化の話ではなくて、
既存の複数のFortranプログラムを「プロセスをちょうど8個に保ったまま並列起動」したい
という話。
長い文字列を変数に代入するとき読みやすいように、その文字列を複数行に 分けたいのですけど、お勧めの方法はなんでしょうか?
>>686 普通にバックスラッシュで改行すればいい。
「バックスラッシュ+改行」は消えてなくなって代入される
>>687 つまり
declare str="xxx"\
"yyy"\
"zzz"
ということですか。
ちょっと見辛いのですよね。
他にありませんでしょうか?
C++だと
declare str="xxx"\
"yyy"\
"zzz"
のように書けるのですが。
>>688 おいおい、C/C++ならそんなことしなくても、
str = "hoge"
"boke"
"aho";
と書けるだろw
>>688 データ上はあくまで1行の文字列を、
文字列が長過ぎる(たとえば100文字以上)だから、
スクリプト上では2行以上にわけて記述したいという話だろ?
だったら、2行目以降はインデントせずに
行頭から記述した方が、前の行からデータが継続していて
実際は1行であることがわかりやすい。
(変にインデントするとスペースやタブや改行がデータに入ってるように誤解する)
よって、
>>687 の言う方法で良い。
str="xxx yyy zzz"
>>686 そういうのは最低限LLでやるべきだろ。
実際Perlとかで書いてみて、
シェルスクリプトと比べてみるといいよ。
むかし英語の教材であったな。ステレオトラックの片chに自分の発音を重ねて録音できる。
バックグランドで動いているプロセスが吐き出すメッセージを スクリプトで取得したいのですが、上手くいきません $ hoge.sh > log & とのようにすれば可能なのは理解しているのですが、 $ hoge.sh & > log を実現したいのです hage.sh内でhoge.sh &を実行しているのですが、 どちらも改変不可なのでhige.sh->hage.sh->hoge.sh と呼び出さざるを得ません コマンドラインからhage.shを実行するとhoge.shの出力が画面上で 得られますが、hige.shから呼び出すと、なにも出力されなくなります このようなことは可能でしょうか?
(hoge.sh &) > log
699 :
697 :2010/09/10(金) 12:31:26
>>698 できました!
サブシェルを使うんですね
700 :
697 :2010/09/10(金) 14:52:39
引き続きですいません どうも出力がバッファリングされているようで、 hoge.sh終了までファイルに書き込まれません ぐぐるとsttyで制御するようなので stty raw; ( hoge.sh & ) > log ; stty sane; tail -f log とか ( stty raw ; hoge.sh & ) > log ; stty sane; tail -f log とかやってみましたが、バッファリングが止まりません 解決するための設定・コマンドはありますでしょうか?
>>697 (hoge.sh &) > log
hoge.sh > log &
そもそも、前者によって何を実現したくて、それが何故後者では実現できないのかが分からない。
hage.sh, hoge.shが改変不可で、そのラッパーであるhige.shを作る(のですよね?)、そして
> コマンドラインからhage.shを実行するとhoge.shの出力が画面上で
> 得られますが、hige.shから呼び出すと、なにも出力されなくなります
のようにしたい(のですよね?)って言う話と、最初の話がいまいち繋ってこないんだけど。
ってか
exec > log
hoge.sh &
じゃ駄目なんだろうか?
>>700 stty無関係。
仮にhoge.shが下のようなのだと、ちゃんと出てくるはず。
#!/bin/sh
echo 1
sleep 5
echo 2
sleep 5
echo 3
hoge.shの中で動かしているプログラムが端末以外に出力するときに
勝手にバッファリングするようになってるんじゃないか?
703 :
697 :2010/09/10(金) 17:49:17
>>701 それです!
さらにこの先に、1分間だけ出力ログを監査して問題なければlogoutというのが待っていまして、
そのため第一弾としてログに吐かせようとして、なんだか山にぶつかってたというところです
上手くいけばログをパイプ変更して監査スクリプトに渡すところを作って完了です
土日で終わるといいな。。。
> exec > log
> hoge.sh &
これ、あっさりいけました!
execって引数なしだとリダイレクトなんですね
この使い方初めて知りました
>>702 その通りでした
hoge.shの中でいろいろコマンド呼び出してるんですが、
それがバッファリングしてました
こっちは改変できそうなのでなんとかなりそうです
これで先に進めますm(__)m
シェルスクリプトで、変数値を変数名として使用したいのですが可能でしょうか? 例えば、 =============== VAR1="ABC" VAR2="DEF" VAR3="GHI" AAA1="VAR1" AAA2="VAR2" AAA3="VAR3" =============== として、通常であれば、$VAR1・$VAR2・$VAR3となると思うのですが、 これをAAA1〜3の値を変数名としてfor文で「$i」使用してVAR1〜3の値を参照したいのです。 よろしくお願い致します。
707 :
706 :2010/09/12(日) 04:55:33
書き忘れました。bashスクリプトです。
>>706 for i in AAA1 AAA2 AAA3;
do
i=${!i}
echo ${!i}
done
かな。もちろん/bin/shでは動かないけど。
>>706 bash依存じゃなくてできる。(純正/bin/shでも動く)
↓
VAR1="ABC"
VAR2="DEF"
VAR3="GHI"
AAA1="VAR1"
AAA2="VAR2"
AAA3="VAR3"
for i in AAA1 AAA2 AAA3
do
eval echo '$'$i
done
>>709 2重間接だよ。もう1段 evalが必要。
eval eval echo '"$"''$'$i
そういうのは最低限LLでやるべきだろ。 実際Perlとかで書いてみて、 シェルスクリプトと比べてみるといいよ。
713 :
697 :2010/09/13(月) 18:49:51
>>713 せっかく bashがあるんならもっとスマートにタイムアウト処理できるよ。
こっちがお勧め(5秒待ちの例)
↓
read -t 5 hoge
指定した年月の月末&その先月末をあっさりと出す方法はないでしょうか。 e.g. 200909 -> 20090931 & 20090831 date -d "1 month 1 day ago YYYYMMDD"でいけると思っていましたが、 「-dなんてネーよバーカ」とSunOSに怒られました。 閏年を考慮しない方法で無理矢理書きはしましたが、 なにかスマートな方法があればお教え下さい。
200909 -> 20090930 & 20090831 でしたねスミマセン
SunOS知らんけど俺の環境では YYYYMM=200909 date -j -v+1m -v1d -v-1d ${YYYYMM}010000 +%Y%m%d date -j -v1d -v-1d ${YYYYMM}010000 +%Y%m%d -v1dは冗長かも
perl入れてperlで書けや
721 :
716 :2010/09/14(火) 22:55:40
722 :
716 :2010/09/14(火) 23:00:17
>>720 その処理だけPerlで書いて外部コマンドとして呼ぶことも候補には入れていますが
やっぱりできればシェルスクリプトで書きたいと思っていました。
(モジュールを追加できないので標準モジュールでどこまでできるかも不明ですし)
文字列を年と月に分けて閏年をまじめにチェックするしか方法ないんじゃない? if文とexprのいい練習課題だね
そういうのは最低限LLでやるべきだろ。 実際Perlとかで書いてみて、 シェルスクリプトと比べてみるといいよ。
配列とか使うわけじゃないし、どっちで書いても大差ないだろうね とマジレステスト
Solarisのdateコマンドって、現在時刻以外を指定できないんだよ。
だから
>>723 が言うような if や expr では解決しない。
Solarisのdateで現在時刻以外を指定するのに、
環境変数TZをいじって 24時間を超える大きなタイムゾーンを捏造するという
裏技があるが、そういう変な方法しかない。
閏年とか面倒ならその辺はcalに任せればいいのでは。
参考: 指定月の月末日を求める set `cal 8 2010`; shift `expr $# - 1`; echo $1
>>729 おもしろいやり方してるな。
俺は普通にgrepとtailとsedあたりでやることを考えてしまうんで、ちょっと新鮮だ。
可搬性はあまり確かめてないけど、Mac(BSD系)では動いてる気がする。 cal 8 2010 | tr -s ' ' '¥012' | sed -n '$p'
>>731 Solaris 10, Ubuntu 10.04はokだった。
>>729 arg配列のそんな使い方があったのか。 自分が思いつくのは普通の
配列だな。
$ DAYS=(`cal 8 2010`); echo ${DAYS[`expr ${#DAYS[*]} - 1`]}
grepとかsedみたいにshで出力を処理したいんだけど ./example | while read x do なんか処理して変数代入とか done 変数を利用して後処理 というのをパイプ(サブシェル)を使わずにできない? 変数相当の値を一旦外部ファイルに書き出さないと駄目かな exampleの出力を自身の入力にできるといいんだけど
>>734 RESULT=`./example | while read x
do
なんか処理して echo 処理結果
done`
"$RESULT" を利用して後処理
./example |{ while read x; do ... done; echo $hoge;} のようにすれば、while の外に出ても {} の内側にいるかぎりは変数の値が見える。 以下のようにすればそもそもサブシェルが生成されないが、 何やってるのかひじょーにわかりにくいのでオススメはしない。 while read x; do ... done <<_EOF_ `./example` _EOF_ bash 限定。 while read x; do ... done <<<"`./example`"
#!/bin/sh [ -z "$HOGE" ] && { ./example | HOGE=hage exec $0; } while read x; do なんか処理して echo 処理結果 done
738 :
716 :2010/09/16(木) 01:30:00
cal…正にこれが求めていたものです! UNIXを初めて触ったころには使っていましたが、 それ以来一切関わることなく脳内から完全に抜け落ちていました。 cal出力の最後を月末とすることでうまくいきそうです。 レスくれた方ありがとうございました!
cal はK&Pの「環境」のシェルスクリプトを作成する例で使用されていて、 斯界のおっさんたちは皆一度は試してるんだぞぉ
740 :
734 :2010/09/16(木) 19:11:08
>>737 って環境によってはハングして動かないよ。
ネタで書いてると思ったよ。
どんなヘボシェルだよ。ww
>>742 FreeBSDの/bin/shで、
>>737 動かないよ。
たしかにFreeBSDはヘボだな。
これならヘボいのでも動くだろう。 [ -z "$HOGE" ] && { ./example | HOGE=hage $0; exit; }
逆に、
>>737 が動くようなシェルなら、
わざわざこんなことしなくても、
command | while ... がサブシェルにならないから、
最初から command | while ... と書けばいいんだな。
よって、
>>737 は全然解決になってない。
改訂版が出てるんだから、言いがかりならそっちに付けろよ。w
採点が終ってから答を直しても単位はあげられないんだよ
748 :
名無しさん@お腹いっぱい。 :2010/09/17(金) 09:15:55
同じサブシェル問題だと、後付けで気付いて言いがかり付けでもダメ。ww
>>748 同じサブシェル問題だと、後付けで気付いたのはお前の方だろw
俺は最初からわかってたよ。
750 :
名無しさん@お腹いっぱい。 :2010/09/17(金) 09:22:05
> 俺は最初からわかってたよ。 > 俺は最初からわかってたよ。 > 俺は最初からわかってたよ。 > 俺は最初からわかってたよ。 > 俺は最初からわかってたよ。
少なくとも
>>742 >どんなヘボシェルだよ。ww
↑って書いてる時点で 742 はサブシェル問題だと気付いてないよね。
FreeBSDだけじゃなく、フツーのbourne shでは動かないことに
この時点でまだ気づいてないww
752 :
名無しさん@お腹いっぱい。 :2010/09/17(金) 09:38:58
わかっていなくても、試すだけで
>>741 は書けるからな。
> 俺は最初からわかってたよ。
と言いたいのだったら最初から書くべきだったな。ww
>>752 最初からわかってたのは本当だ。
でも答を書いてしまうと面白くないから
>>737 他の反応を見るために書かなかった。
「ネタで書いてると思ったよ」という言葉に、
「サブシェル問題の解決なのにサブシェル問題に引っかかってるという笑いネタかw」
というニュアンスを含ませたつもりだが、読みとれなかったかい?
754 :
名無しさん@お腹いっぱい。 :2010/09/17(金) 09:45:10
涙ぐましい渾身の後付け言い訳。ww
はっきり言えることは、
>>737 自身が 737 を書いた時点で、
「全然問題の解決になってない」ということを理解していなかったということだ。
これだけは紛れもない事実。
756 :
名無しさん@お腹いっぱい。 :2010/09/17(金) 09:52:19
事実は
> 俺は最初からわかってたよ。
と、
>>741 が後付けで必死に言い張っている事。
>>757 バグはそんなに恥ずかしくない。後付けで↓と言い張るよりは。
> 俺は最初からわかってたよ。
> 俺は最初からわかってたよ。
> 俺は最初からわかってたよ。
> 俺は最初からわかってたよ。
>>759 じゃあ、バグを認めずに(バグの原因を理解せずに)
>>742 「どんなヘボシェルだよ。ww」
って言うのはどれくらい恥ずかしいですか?
子供かよ。
それより、
>>737 自身は動作確認したんだろうか?
それとも、/bin/sh -> zsh みたいにリンクされたOS使ってたのか?
そういう質問が出ることも最初から分かっていました
>>763 で、762の質問への回答は?
(1)動作確認してなかったのか、(2)/bin/sh -> zsh にしてたのか?(その場合はOS名も)
765 :
名無しさん@お腹いっぱい。 :2010/09/17(金) 17:52:57
>>760 ↓これの100分の1くらいかな。w
> 俺は最初からわかってたよ。
>>762 確認してないが何か?
>>765 >確認してないが何か?
>確認してないが何か?
>確認してないが何か?
>確認してないが何か?
あーあ。自爆、敗北宣言乙w
767 :
名無しさん@お腹いっぱい。 :2010/09/17(金) 18:01:20
確認してない事と、お前が後付けで知ったかぶりした事は全く独立なんだが。 どこが敗北宣言なんだろう。ww
すみません、質問させて下さい。 シェルスクリプトの練習の為、練習用のシェルスクリプトを作成しており、 Cygwin上にて #!/bin/sh var1=100 var2=0 num1=`expr 10 + 30` num2=`expr $var1 - 30` num3=`expr 100 % 30` num4=`expr $var2 && 1000` echo $num1 $num2 $num3 $num4 という、上記内容のシェルを実行しました。 下記のような結果が出力される予定でした。 $./script2 40 70 10 0 ところが、 expr: non-integer argument test02.sh: line 7: 1000: command not found 00 という内容が出力されてしまいました。 $var1、$var2が認識されていないようなのですが、原因が分かりません。 シェルはbash、OSはWindowsXPSP3です。 何卒、御教授お願い致します。
>>768 dash on Debian だと
40 70 10 0
てなったよ。
set -x
してみたらどう?
>>768 改行コードが CR+LF になってるだろ。LFのみにしろ。
var1=100^M とかになって実行されるから、正しく数値として実行されない。
>>769 御回答、ありがとうございます。
set -x var1=100
set -x var2=0
としましたところ、今度は下記の結果が出力されました。
$ sh test02.sh
+ set -x $'var2=0\r'
++ expr 10 + 30
+ num1=$'40\r'
++ expr - 30
expr: syntax error
+ num2=$'\r'
++ expr 100 % 30
+ num3=$'10\r'
++ expr
expr: missing operand
Try `expr --help' for more information.
+ num4=$'\r'
+ echo $'40\r' $'\r' $'10\r' $'\r\r'
10
>>769 御回答、ありがとうございます。
Meadowにて改行コードをLFのみにしようとしたのですが、メニューが英語で、
どこを触ればいいのか分かりませんでした…
メニューを日本語化できないかと検索してみたのですが、403エラーでサイトに
入ることが出来ませんでした。
質問ばかりで恐縮ですが、LFのみにする為、どこを触ればよいか教えていただけないでしょうか?
だめだこりゃw 改行コードの問題ということがはっきりして、 このスレ的には問題解決したので、 次の方どうぞ ↓
>>771 $ tr -d '\r' < in > out
あと、 set の使い方が違うよ。man 見てね。
メニューとか言ってる奴がMeadowなんて使うなよ。 C-x RET f で, sjis-unix とか指定すればいい。 分からなかったら禿丸とかでも改行コード変更できるだろ。
cygwin なら dos2unix
>>768 Don't say "shell", idiot !
あ、こっちは日本語スレだった、、
質問です。 起動したアプリケーションの終了を待たずに、次のステップを実行するにはどう書けばいいのですか?
&
ありがとう。
質問です ・ findで見付かったファイルに対してそれぞれ複数のコマンドが必要な処理を行いたい ・ ディレクトリ名にスペースが含まれる可能性がある ・ 複数コマンドと言っても mv $f $f.org;sed -e '....' <$f.org >$f;rm $f.org みたいなワンライナーな処理で 汎用的に使いまわすようなものでも無い。 以上の条件をふまえると、思い付くやり方は 1. 複数のコマンド部分をシェルスクリプトにして、find -exec 2. 複数のコマンド部分をシェルスクリプトにして、find -print0 |xargs -0 3. 一時的にIFS='\n'にして、for f in `find ...`;do .... という3つが思い付くんですが、1,2はわざわざスクリプトにするのは億劫で、3はちょっとトリッキーな感じで どれもしっくり来ません。 割と良くある処理だと思うんですが、標準的なやり方って他に何かありませんかね?
-exec sh -c 'mv "{}" "{}.org";sed -e ... < "{}.org" > "{}";rm "{}.org"'
二つのファイルがあります。 一列目に日付が二列目に数字が入っているのですが fileAにない日付のデータがfileBにはあります。 fileAになければfileBのデータを補完して新たなfileを作成したいのですが、 簡単な方法ありますでしょうか? file A 199901 10 199902 15 199903 16 199004 17 file B 199901 18 199902 13 199903 13 199004 13 199005 18 file NEW 199901 10 199902 15 199903 16 199004 17 199005 18 というようにしたいのですがどうすればよいでしょうか。
出力順違うけど、ダメ? $ sort -u -k 1,1 filea fileb 199004 17 199005 18 199901 10 199902 15 199903 16
応用力の無い奴だな。 -exec sh -c 'f="{}"; mv "$f" "$f.org";sed -e ... < "$f.org" > "$f";rm "$f.org"'
>>785 タイプ数増やして応用力とはこれ如何にw
findで見つかったファイル名の中に $ を含むもの( $hoge という名前のファイルとか)
があったら、f="{}" のところで展開されちゃうから、エンバグしてるじゃん。
>>787 そのバグは
>>781 に既に含まれてるから、「エンバグ」ではない。
あと、$だけじゃなくて " ` とかがあってもコケるな。
>>783 ありがとうございます!
試してみます!
>>789 出力順を変えない方法もあるよ:
$ cat file_A file_B | awk '!a[$1]++'
フォルダ内のdebパッケージを連続で dpkg -x xxx.deb xxx するスクリプトを作りたいんですが、 xxx.deb から .debを削除するには?
basename xxx.deb .deb
793 :
791 :2010/09/26(日) 22:09:55
>792 sedを使うのかと思ってました。 basenameってこう言う使い方ができたんですね。 ありがとうございました。
>>793 普通は、
for f in *.deb;do dpkg -x $f ${f%.deb};done
だけどな。
795 :
793 :2010/09/27(月) 06:55:47
>794 おー スマートですね
あるプロセスの稼働をチェックするため PROC=`ps ax | grep "process"` if [ -n "$PROC" ] then として見たら、grep processがあるからダメなのね どうすりゃいいの?
grep -v grepはできない?
>>798 見たいプロセスが logreport.sh とかだった場合に困る。
grep '[p]rocess' みたいなテクよくみかけたけど
そういう小技こねくりまわすよりpgrep使う方が楽だと思うけどな。 ない環境ならしょうがないけど。
>>801 そりゃ、PerlやRuby、Pythonなどが普及しても
「どこでも通じるからawkは覚えておいたほうがいい」なんてのがUNIX文化。
そこにおいて >801 は異質に見える。
awkがどこでも使えるとは初めて知った
804 :
名無しさん@お腹いっぱい。 :2010/09/29(水) 20:52:30
awkが使えないOSがあるなんていう奴初めて見た
理論馬鹿が振りかざす「どこでも」はいったいどこまで広がるんだろう。
ごめん、言いだしっぺだけど pgrepは使えませんでした で、板が代わって、そういう小技こねくりまわした方法が見れない もう一度、書いてもらえる雰囲気じゃない?
awk使えばいいよ
組み込み系のbusyboxでもawkは欠かせないからな。 いまいじっているシステムは全部で16Mぐらいの/ だけど、awkはある。pgrepはない。 perlもpythonもbashもない。 こういうシステム上でもinitスクリプト等にawkは必須。
>>809 必死な屁理屈野郎にはなに言っても無駄だと思うよ。
そういうのは最低限LLでやるべきだろ。 実際Perlとかで書いてみて、 シェルスクリプトと比べてみるといいよ。
813 :
807 :2010/09/29(水) 22:15:12
>812 ありがとう
nawkかgawkか確認すべき
ガウォーク
条件がそろった時にメールを送る このスクリプトをcrondで1時間ごとに起動する 1度メールすると次は送らない とするなると、メールを送ったかどうかの、何らかのフラグが必要でけど 一般的には、何をフラグとすればいいでしょうか? ファイルの有無? ファイルの中身の有無としたとき、ファイルのテキストを空にするコマンド ってありました。?
>
>>816 > 1度メールすると次は送らない
生涯で1回しかメール送らないってこと?
> ファイルの中身の有無としたとき、ファイルのテキストを空にするコマンド
> ってありました。?
:>file みたいな
あ、そう言うことですか サンキュー
> は zsh とか csh とかでは違う動作になるので どこでも動く :> の方が安心といえば安心。 まあ、sh と zsh をごっちゃにする人はあんまりいないと思うけど。
cat /dev/null > file などとやってた俺はダサイな。 ':' って初めて知ったが他にどんな使い方があるのなか?
while :
while : で無限ループとか : ${FOO:=bar} で変数のデフォルト値設定とかか?
cp /dev/null file派 は俺だけか?
そんなダサいことしてるのは流石にお前だけだろ…
>>822 そっちの方が、誰が見てもわかりやすいってのはあるがな。
条件の否定形が見易い形に書けなくて if 肯定の条件; : else 本来やりたいこと fi みたいなの書いたことがある。
長い行を折り返すために、キリがいいからって、>file の前で折り返したスクリプトを見たことがあるw
>>828 if ! ( 肯定の条件 );
本来やりたいこと
fi
じゃだめ?
:<<'_' 複数行のコメント _
内部的にTMPファイルまたはパイプを作る動作は起きるから、 完全なコメントアウトになってないのが問題だな。
皆様のお知恵を拝借したく Linux bash3.2.25 の環境です 関数がいくつかあって、ある関数内(Aとします)の条件式(if)で分岐した結果、異なる関数(Bとします)を 呼び出したとします。 その呼び出された関数Bの処理が終わった後、直前に実行してた関数Aに戻る方法はないでしょうか? 何をしたいかというと、Aで実行したコマンドの結果の判定を行い正だった場合に 関数Bに移動してそこでwhileを使ってカウンタを増やし、また関数Aに戻ってコマンドを実行し 偽になるまで繰り返したいのです。(偽になったら関数A内のif文で抜けて次の関数Cへと進みます) どなたか良い方法を教えていただけると助かります
>>835 関数というのは、処理が終れば呼び出し元に戻る。
だから何もしなくても関数Aに戻るよ。
逆に、関数A「以外」に戻ることはできない。
>>836 わぁ、すみません・・・
仰る通りでした。途中で別の所を呼んでたのをすっかり忘れておりました。
お手数おかけしました・・・
次はLinux板で聞いてね。
>>838 別にLinux依存の質問じゃないし、こっちで聞いていいよ。
あと、Linux板のシェルスクリプトスレは落ちて終了したから、こっちで聞くしかない。
くだ質で聞けばいいんじゃね。
841 :
名無しさん@お腹いっぱい。 :2010/10/06(水) 11:17:31
出力をしたくないときによく ./hogehoge >/dev/null 2>&1 とやりますが、なぜリダイレクトは後ろから評価されるのですか? この順序に例外はありますか?
>>841 後ろから評価されてないよ。
2>&1 は 標準エラーを標準出力と同じところに出力するということ。
./hogehoge >/dev/null 2>&1
の場合は 2>&1 が評価された時点で、標準出力が /dev/null に設定されている
ので、標準エラーも /dev/null に設定される。
./hogehoge 2>&1 >/dev/null
この場合は 2>&1 が評価された時点で、標準出力が画面に表示される設定になっ
ているから、標準エラーが画面表示される。
分かり難い説明だと思うので、検索したほうがいいかも。
後ろからじゃ無くて前からだよ。 1 >/dev/null 標準出力を/dev/nullにリダイレクトする。 2 2>&1 標準エラーを(さっき/dev/nullにリダイレクトした)標準出力にdupする。 感覚に合わないのは、./hogehoge 2>&1 | hagedebu これは、標準出力をパイプにリダイレクトするのが先。
まぁ dup2 について調べろってことだな
もうちょっとお母さんみたくやさしく
「リダイレクトは後ろから評価される」と、 間違いを堂々と書いてるサイトや文章が結構存在するから注意。 正しくは「前から評価される」 「ファイル記述子の複製」を理解すれば理解できる。
うちの社員研修では「リダイレクトは後ろから評価される」と教えてます。 正しいかどうかよりもわかりやすさ優先なので。 何か問題でも?
>>846 ここでわからないとされるのは、前から評価されるなら
2>&1 で標準エラー出力(2)を標準出力(1)にしたときに
そのあと >/dev/null にしたときに なぜ元標準エラー出力は
釣られないのか というところだろ。
ここを簡潔に説明するのに必要なのはdupの勉強ではない
>>846 ,847
なんで、マニュアルに書いてあることを無視するん?
>>841 ,
>>847 後ろから評価されるって思うには、どういう風に解釈すればいいの?
普通、2>&1 を「stderrにstdoutと同じにする」って読むと思うけど
これだと、前から後ろに順番に読まないと意味が合わないよね
読み方が違う?もっと根本的なところが違う?
>>普通、2>&1 を「stderrをstdoutと同じにする」って読むと思うけど の間違い・・・
foo 1>file 2>file として、書き出される順番が揃わなくて考えこんだ日を思い出した
>>852 言い直したところでその説明だと致命的におかしいのぜ。
ls -e 2>&1 >hoge.txt
のとき、標準エラー出力はhoge.txtに吐かれない。
「stderrにstdoutと同じにする」 と読んでしまったら
評価順序的にhoge.txtに吐かれないとおかしいだろ。
同じになったんだから。
「同じにする」という理解方法が間違い・
1とか2は、「ファイルディスクリプタ」
(ハンドルみたいなものかな?)
に対して、stdoutとかstderrは、「ファイル」そのもの。
これらを混同するから、わからなくなるだけ。
>>853 さらに、バファリンが絡んできて、わけわかめ?
>>855 >stdoutとかstderrは、「ファイル」そのもの。
↑違うよ。
stdoutとかstderrはそれぞれファイル記述子1と2の別名。
例えば、hoge 2>&1 と、 hoge 2> /dev/stdout は同じ動作。
ファイルそのものはまた別。
>>855 「FILEそのもの」と書きたかったのかな。
FILEは「ファイル」じゃなく「ファイルハンドル」
ファイルでスクリプタも、UNIX固有の特殊なファイルハンドル for システムコール。
そういえば、標準エラー出力と標準出力を入れ替える手段って無くね?
>>858 hoge 3>&2 2>&1 1>&3
じゃ駄目?
>>859 うまくいった・・・
となると今までの評価順序の話は根底から崩れる予感。
&3 って誰だよって話
もう面倒くさいから「後ろから評価される ように 動作する」でいいよ。
>>861 「後ろから評価される ように 動作する」と考えると、
>>859 で stderrとstdoutを入れ換える動作が説明できない。
>>860 > となると今までの評価順序の話は根底から崩れる予感。
> &3 って誰だよって話
最初から全然理解できてないだけじゃん。
3>&2 : dup2(2,3) 3を2と同じところにつなぐ 2>&1 : dup2(1,2) 2を1と同じところにつなぐ(3は元の2の先(stderr)のまま) 1>&3 : dup2(3,1) 1を3と同じところにつなぐ(2は元の1の先(stdout)のまま)
そんなことより、どう考えれば後ろから評価されるように 見えるのか教えてくれ
(man 2 open , man 2 dup2 じゃ) いかんのか
>>848 がdupを理解してないことはよくわかった。
これを簡潔に説明するのに必要なのはdupの勉強だから、
もう一度勉強し直せよw
>>848 むしろ、なんで「釣られる」という発想になるのか俺には分からない
てきとーなプログラミング言語で
b = a
a = 1
としたときに、bにも1が代入されると思う?
それと全く理屈は同じなんだけどね
上の式のbをfd2、aをfd1と考えて欲しい
後でaに別の値を代入(リダイレクトによってfd1が参照するものを変える)したところで、b(fd2)の中身はかわらないよ
後ろからとか前から評価とか意味がわからんから、 右結合とか左結合とか文法の言葉で語ってくれ。
>>870 hoge 3>&2 2>&1 1>&3
&1,&b,&3をそれぞれa,b,cと置き換えると
b=c, a=b, c=a;
だろ。評価順に考えればこうなる。簡単な話だ。
>>872 c=b
b=a
a=c
の間違いでは?
代入の向きが違う
3>&2 は、fd3にfd2をdupする(3に2を代入する)わけでしょ
何いっての
>>874 なるほど、評価順以前に
これすら理解していない人が話をひっかきまわしていたのか
(ハード) リンクの喩えのほうがいいかもな 発想の元は同じなわけだし
初歩的な質問で申し訳ありません bashです whileが入れ子になってる関数で、2段目のwhileの中でセットされた変数が、その2段目のwhile のループを抜けた時にクリアされてしまうのですが、これはそういう仕様なのでしょうか。 また、抜けても変数の値を保持するにはどうしたらよいでしょうか。
意味がわかんないけど、 #!/usr/local/bin/bash func () { while :; do while :; do var=$1 break done echo $var break done echo $var } func value echo $var で、valueが3回表示されないってこと?
エスパーカが足りない。どうせサブシェル問題だろ
>>881 あ、サブシェル問題だったんですね。よくわかりました。解決しました。
884 :
879 :2010/10/14(木) 17:56:23
886 :
879 :2010/10/14(木) 18:00:55
まーたサブシェル問題か
888 :
879 :2010/10/14(木) 18:02:48
ケチケチすんなよなぁ兄弟
bashの関数なんですが function change_oppai { if [ 〜 ];then sed 's/AAA/oppai/g' else sed 's/BBB/oppai/g' fi } この関数 change_oppai を標準入力に対応させるにはどうすればいいのでしょうか? echo "AAA" | change_oppai -> oppai
>>889 そのままで標準入力に対応してるけど。エスパー召喚?
>function change_oppai { bash でしか動かん。 昔からの関数定義と比べて機能が強化されたわけでもないのに、 なんで bash はつまらない非互換を導入したがるんだか。
>>891 zshでもkshでも動きますが。何言ってんだか。
bashで質問です。 ifで正規表現を使った判別を行っていますが、複数条件の時はどうすれば良いのでしょうか? if [[ $i =~ ^foo ]]; then echo foobar elif [[ $i =~ ^bar ]]; then echo foobar fi これのifとelifの条件式を一つにしたいのです、エラーになりますが、例えばこんな感じです。 if [[ $i =~ ^foo ] -o [ $i =~ ^bar ]]; then echo foobar fi よろしくご教授お願い致します。
>>893 if [[ $i =? ^foo || $i =? ^bar ]]; then
>>891 functionってわざわざ書くのが抵抗感あるかな。
函数って言うより、ただのサブルーチンだし。
>>894 ありがとうございました。できました。
-oでなく、CやJavaで用いる||で良かったのですね。これなら覚え易いし、使い易いです。
=~と=?は同じでしょうか。これについては未だ不明なので調べてみます。
本当にありがとうございました。
>>894 の「?」は文字化け。チルダーがなぜか化けてしか書き込めん。
>>897 ありがとうございます。
なるほど、ではチルダで良いのですね。
重ね重ね本当にありがとうございました。
同じやつだったら何だというんだ。
903 :
名無しさん@お腹いっぱい。 :2010/10/24(日) 22:35:24
スクリプトの記述とは直接関係はしないけど 実務でシェルスクリプトを書く皆さんはコメントって結構意識して書いてますか?
面白いと思って書いてるんだろうけどツマラン
>>903 やる気と関係者のレベル次第。
素のUnixなんかでVimが入っていない場合だと、めんどくさい上にミスしやすくなるし。
>>903 シェルに限らず業務用ソースはコメントを意識して多めに入れる
シェルに限って言えば・・・ascii(英語)でコメント書くことかな
シェルはソースが読めてしまうので、 外に出すシェルは当然難読化処理してから出すよな。 コメントなんて論外。難読化のためのオトリコメントはアリだけど。
は?
>>907 難読化ツール何使ってる?
perl用みたいにぐちゃぐちゃになる奴ある?
難読化というか、コードが汚いだけなんだけどね
シェルスクリプトのコンパイラがあると 昔何かで読んだ記憶があるが 実物を目にした事はない
configureの難読度ってどんなレベル?
難読化って例えばこういうのだろ 実行すると hogeと表示 ↓ #!/bin/sh h==;i=';';a=' ';t=e;e=v;s=a;q=l $t$e$s$q$a"a${h}e${i}b${h}c${i}c${h}h${i}d${h}o${i}e${h}' '${i}f${h}g" $a$b$c$d$e$c$d$f$a
超絶に遅くなりそうだなw java scriptなんかだと、難読化しながらサイズもコンパクトになるという二重のメリットがあったりするが。
変数に*(アスタリスク)を入れるにはどうしたらいいでしょうか。 HOGE="\* foo" として、 echo $HOGE * foo と出て欲しいのですが、 \* foo になっちゃいます。 ヒアドキュメントのパターンもためしてみましたがうまくいかず・・・。
困ったらeval
echo "$HOGE" は? dashとbashでは期待通り。
918 :
916 :2010/10/29(金) 23:59:35
俺アホス
HOGE='* foo' echo "$HOGE"
HOGE="* foo" echo "$HOGE"
>>916-920 thanx
ヒアの場合は
HOGE=`cat <<'EOF'
* foo
* bar
EOF`
echo "$HOGE"
でいいのね。助かりマスタ。
aaa bbb ccc というテキストがあるとしてcatして変数にx="aaa bbb ccc"と入れたいんだけどどうやればいいですか? シェルはbusyboxのashです。
>>922 x="$(cat foo.txt | tr '\n' ' ')"
>>922 x=`cat hoge.txt`
x=`echo $x`
わざとダブルクォートを付けずに echo $x して xに代入しなおすのがポイント
>>923 はtrコマンドが無駄。
xなんて使わずに、set -- `cat bar.txt`でいいじゃん。
>>925 もちろん
>>924 の方が視認性がある
一旦 x に格納は無駄じゃない。
外部コマンドの trを起動するオーバーヘッドの方がよっぽど無駄。
元質問はbusybox環境だから、trのないbusyboxだったらそもそも実行できない。
どうしても一旦 x に格納したくなければ
x=$(echo $(cat hoge.txt))
とすれば良いが、この方が視認性が落ちる。
よって、
>>924 が最適解。
928 :
923 :2010/10/30(土) 12:54:58
色々方法があるんだな 。
>>923 の場合、最後に改行があるとcccの後にスペース入っちゃうし、改行が
\r\nだったら動かないとかあるんで、あんまりよくないとは思ってた。
>>903 スクリプトを作れと頼まれればコメントを書くけど
何かの仕事を頼まれて、それ用にスクリプトを書いて
作ったときは書かない
ashって$()使えるん?
Kシェルでlsとかfindとかの返り値をもらえる方法があったら教えてください。 (検索に成功したら1とか)
普通に $?
そんな低レベルな質問であるはずがない。 もっと深読みするんだ。
ファイルの中に一列 hoge1 hoge2 hoge3 hoge4 hoge5 というデータがあり、これを読んで hoge1 hoge2 hoge3 hoge4 hoge5 と1行で出力するshシェルスクリプトを教えてください。
echo `cat filename`
> shシェルスクリプト ちょっと斬新。
ファイルサイズがでかい時は、 while read x; do echo -n "$x "; done < filename | sed 's/ $//'
tr '¥012' ' ' < text じゃだめなん? あ、最後の改行まで落ちるか。
paste -sd' ' filename
pasteとかtrなんて存在すら忘れてた
shがシェルの1つだから、shスクリプトのほうがわかりやすいな
943 :
923 :2010/11/01(月) 23:22:06
x="$(cat test.txt | tr '\n' ')" 打ち間違えて ' が一つ足りませんでした。 > が延々と出てCtrl+Cでも終了できません お助けください orz
944 :
923 :2010/11/01(月) 23:24:33
>)" と打ったら終了できました。 とりあえずスレ汚しすいません。。。
たぶん Ctrl-D(End of File) でもイケた気がする。 Ctrl-Cは動いてるプロセスに 止まれよ! と通知するやつだから、 まだコマンド発行してない段階では通用しないわさ。
>>943 だから 視認性(笑) がある
>>924 の方を使えとあれほど、、
普通のシェルなら Ctrl+Cで終了できるよ。
クォートの途中を表す > プロンプトが出てるだけだから。
zshもbashもCtrl-Cで止まったわ。
948 :
922 :2010/11/01(月) 23:30:54
あ。自分は
>>922 でした orz
>>923 ,924さんの方の両方で出来ました。
>>927 さん詳しい解説と環境のご配慮までありがとうございます。
busybox-1.17.1で tr のアプレットまで入っているようです。
オプションは -c -d -s しかありませんでしたけど。
皆さん本当にありがとうございました。
またスレ汚しすいませんでした。
おおう、そういえばbusyboxのシェルだったか。
grep(egrep)でCRLFの改行コードの検索をやりたいのですが、 od -c hoge.txt | egrep '\\\n \\\r' だと 0000000 a a a a a a a a a a a a a a a \n 0000020 \r のように改行をまたいだ場合に検索できません。 この場合もCRLFを検索するにはどうすればいいのでしょうか?
以下のようなバックアップスクリプトを作ってみたんだが 圧縮したあとに展開したら元ファイルとファイルサイズが全然違う どうしてかわかるエロイ人いませんか #!/bin/sh PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin KEEPDAY=90 BK_DIR=/home/hoge/www PUT_DIR=/home/hoge/backup/www MKFILE=www.`date +'%y%m%d'` TGZFILE=$MKFILE.tar.gz RMFILE=www.`date -v -"$KEEPDAY"d +'%y%m%d'`.tar.gz cd $BK_DIR echo "Packing to $MKFILE" tar cvzf $TGZFILE ./ echo "Checking to $TGZFILE" if [ -f $TGZFILE -a -f $RMFILE ]; then rm -f $RMFILE echo "Removed $RMFILE" exit 0 fi
バックアップしたいディレクトリの中にバックアップファイル作っちゃうの?
>>950 nとr逆じゃね?
CRLF = ^M^J なので、少なくとも改行が CRLFかLF だと分かっていれば
grep "^M$" < hoge.txt
でいいんじゃ?
(^MはCtrl押しながらmを打鍵)
環境(エディタ、端末)にもよるけど、普通 Ctrl+m = Enter じゃね? Ctrl+v Ctrl+m で入れる環境が多いと思うけど。
すまん、確かにCtrl-Vの前置を書き忘れていた。
956 :
935 :2010/11/02(火) 17:55:13
>>953-955 ありがとうございます。
出来ました。
nとr逆ですね。
cat -v hoge
で見える改行コードの入力の仕方がわからなかったので助かりました。
しかし、grepって複数行の検索出来ないんですね。
>>952 バックアップしたいディレクトリをフルパスで指定すると
tarのエラーで/を先頭に付けるな
と、怒られてしまったので
cdでバックアップ元のディレクトリに移動
↓
./でバックアップ元を指定して、バックアップ先へtar.gzで圧縮
という流れにしました
もっと良い書き方があるんだろうけどターミナル触るのが久々
過ぎてこんなぐらいしか思いつかなかった
もっと良い書き方はございますか
ございます
(cd /hoge/hoge; tar cf - *) はいろいろ応用が利く。 最近はcdできるtarもいろいろあるけど。
-C ってSolarisにさえあるし、相当古いtarからなかったっけ
じゃあかなりポータブルだと思っていいのか。 今更だが、 tar cf - -C /hoge/huga * とサブシェル内cdだと*の展開タイミング が違うので、同じ投稿に並べて書いたのは不適切だったな。
>(cd /hoge/hoge; tar cf - *) はいろいろ応用が利く。 ; じゃなくて && にすべし。; だと間違えて権限のないディレクトリに cd しようとして失敗しても、カレントディレクトリのまま tar が実行されてしまうので、 場合によっては意図しないファイルを上書きして消すなんて事故が起きることがある。 というか、そういう事故を起こさないためにも -C を使ったほうがいい。
965 :
951 :2010/11/05(金) 00:11:31
>>964 確かにその方がいいですね
仕事でやってる時は事故を起こさないようにそうしてた気がします
ところでファイルサイズ違う件について心当たりある方いま(ry
その後もググって見たけど相変わらずわからずで
何回もスレ汚しスマソ
もっと具体的に書けや
複数のマシンを一度に再起動をかけたいのですが、どのような方法があるでしょうか?
>>967 for i in host1 host2 host3; do ssh $i /bin/shutdown; done
>>969 それだと host1 が落ちてた時に host2 移行が再起動できません。
あと、shutdown で、再起動できるんですか?
>>969 for i in host1 host2 host3; do ssh $i /bin/shutdown& done
for i in host1 host2 host3; do ssh -f $i /sbin/reboot done
ふぉーっ 愛 淫 ホスト1 ホスト2 ホスト3; どエスエスエッチ -ぇふ $愛 /エス便/り豚 ドーン
kshで特定の日時を表示させたい場合、 date 20000101 のYMD形式は可能だけど date 20000101000000 のYMDHMSになるとエラーになるので困っています。 なにかオプションが必要ですか?
>>974 それ、ksh関係ない。dateコマンドの話。
で、そもそも指定が間違ってる。
date mmddHHMMYYYY.SS が正しい。
2000年01月01日00時00分00秒なら、
date 010100002000.00
ありがとうございます。 まさか.SSとは…いらないよってオプションはないんですかね? なんかスッキリしないなぁ…
いまどきdateで時刻設定することなんてないし。ふつーntpだろ。
表示させたいって書いてないか?
>>978 質問のように「date 20000101」とか実行したら「設定」される。
「表示させたい」って書いてあるのは、設定した結果、以降OS時刻として
その時刻で表示させたいという意味だろ。
自作プログラムに、コマンドラインから&を渡したのですが、 バックグランドと解釈されてしまいます。 \でエスケープしてもダメだったのですが、 どうすれば渡せるのでしょうか?
>>980 自分の環境では出来るな。
$ cat hoge.sh
#!/bin/sh
echo $*
$ ./hoge.sh ¥&
&
$
982 :
974 :2010/11/17(水) 10:46:18
何度もすいません 実際に行いたい動作は 引数として渡されたYMDHMS形式の文字列が日時として妥当であるかチェックする です 実装として date "+%Y%m%d%H%M%S" -d 引数文字列 の結果と引数文字列が一致するかチェックするロジックを組みました。 ですが肝心の date -d 20000101000000 がエラーを吐いてしまうため上手く行かず… (-dは記述が漏れてました。すいません) 何か方法はありませんかね?
info coreutils すると Date input formats という項目に date -d で食える書式が書いてある。
>>982 perlか何かで書いた方がいいんじゃね。
985 :
名無しさん@お腹いっぱい。 :2010/11/17(水) 11:54:23
>>982 GNU dateってことは bash限定でいいよな。
ほらよ
↓
TIME=20000101000000
date +%Y%m%d%H%M%S -d "${TIME:0:8} ${TIME:8:2}:${TIME:10:2}:${TIME:12:2}"
BSDのdateならもっと楽できるのに
coreutils確認しました やはりロジック上でフォーマット変換をしないといけないようですね フォーマット変換すれば実現可能なのはわかっていたのですが、直感的にdateの使い方で対処出来ると思っていました ご提示頂いたスクリプトも参考に対処したいと思います
man date BSDのdateなら楽勝なのに
小6の算数の応用問題を解けなかった奴が 「方程式を使えば解けたのに」 と負け惜しみを言ってるみたいだな
しかし日付、時刻なんて結構シェルで扱いたいデータなんだけど やりにくいよね。 低レベルでそれらを扱える便利なコマンドが無い。
awk/sedの訓練をさせるため。
>>990 どう扱うかってけっこう場面場面で違うから
「便利なコマンド」を作りにくいんじゃないかな。
LLでやっちゃった方がてっとり早いと思うよ。
いまどきのユーザーはみんなLLに転向しちゃったし、 シェルの話題は出尽くしたので、 次スレはナシでいいよ。
LLって何?
シェルスクリプトもはいってんじゃん
VBSとshしか書けないがVBSはコード長くなるしコーディング時間もshの倍以上かかる。 が、日時の扱いがめっちゃ楽。
999!!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。