[過去ログ]
シェルスクリプト総合 その27 (1002レス)
シェルスクリプト総合 その27 http://mevius.5ch.net/test/read.cgi/unix/1525337663/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
57: 名無しさん@お腹いっぱい。 [sage] 2018/05/17(木) 08:37:52.41 すいません。 いま、誤ってログインシェルの設定ファイル(~/.bashrc)を空にしてしまいました。 しかし、まだログアウトしていないため、今稼動しているシェルはその設定を保持しています。 例えばエイリアスを知りたければ`alias`とやればいいはずですが、ほかにもシェル関数や環境変数なども読み込んでいます。 これらの値を今取得するにはどうすればいいですかね。 http://mevius.5ch.net/test/read.cgi/unix/1525337663/57
72: 名無しさん@お腹いっぱい。 [] 2018/05/21(月) 09:50:43.86 /home直下にhoge00〜hoge99までの名前がついているディレクトリがあるとします 他にも/home直下にはディレクトリが存在します ディレクトリ名を検索しながら、hoge00-hoge99の名前にマッチした複数のディレクトリの中の、ある特定のディレクトリに既存のファイルであるtestという名前のファイルをコピーしたいです ある特定の、という意味は ・hoge○○ディレクトリ直下にtestというファイルがあったら→スルー ・testというファイル名のファイルがhoge○○直下になければ、既存のtestを該当hoge○○ディレクトリ直下にコピー このようなシェルスクリプトを書きたいのですが教えてください http://mevius.5ch.net/test/read.cgi/unix/1525337663/72
77: 名無しさん@お腹いっぱい。 [sage] 2018/05/21(月) 10:19:49.89 filehoge="test" [ ! -f "$filehoge" ] exit 1 seq -f 'hoge%02g' 1 99 | while read hogedir do [ -d "$hogedir" ] && [ ! -f "$hogedir/$filehoge" ] && { cp "$filehoge" "$hogedir"; echo "copied into $hogedir"; } done http://mevius.5ch.net/test/read.cgi/unix/1525337663/77
82: 名無しさん@お腹いっぱい。 [sage] 2018/05/21(月) 10:42:46.03 findは存在を確認するのは楽だろうけど、存在しないことを確認するのは面倒じゃない? http://mevius.5ch.net/test/read.cgi/unix/1525337663/82
120: 名無しさん@お腹いっぱい。 [sage] 2018/05/24(木) 20:05:30.06 $ cat a.file > b.file とやるのと $ cp a.file b.file とやるので違いが生じる場合はありますか? http://mevius.5ch.net/test/read.cgi/unix/1525337663/120
133: 名無しさん@お腹いっぱい。 [sage] 2018/05/26(土) 04:09:24.19 お知恵お借りしたいです。 awk '($3 !~ /ここにパイプ区切りで記述したい/) && ($4 ~ /01/)' output.txt 上記のawkで条件に当てはまるファイルを絞り込みたいのですが その1 別ファイルからのawkの結果を $aaa に設定してある その2 $aaa は複数列の出力なので set コマンドにて位置パラメータに分けてある その3 各変数を展開して文字列としてパイプで区切ってawkを使いたい。 以上のようなことをやってみたのですがどうもうまく行きません。 また、違うやり方もあるようでしたらご教示いただけるとありがたいです。 よろしくお願いします。 http://mevius.5ch.net/test/read.cgi/unix/1525337663/133
136: 名無しさん@お腹いっぱい。 [sage] 2018/05/26(土) 07:13:03.91 ごめん俺の理解が悪いと思うのだがあなたのやりたいことが見えない。 他の人にまかせるわ。 もしくはZZZ.txtの内容をプライバシーに障らない程度に具体的に教えてほしい。 「ZZZ.txtからgrepで取り出した値をパイプで連結して処理する」という文言からは ZZZ.txtには命令が一行ずつ書かれているように受け取れるのだが、そうじゃないよね。 それとも「パイプで繋ぐ」というのはシェルのパイプ実行ではなく単に文字列としてパイプを区切りとして使うという意味? もしそうなら $ cat ZZZ.txt | grep XXX | tr '\n' '|' | sed 's/|$//1' ↑こういうので行けるけど。違うでしょ? http://mevius.5ch.net/test/read.cgi/unix/1525337663/136
212: 名無しさん@お腹いっぱい。 [sage] 2018/06/06(水) 09:02:34.23 aaa=(888 犬 `date +"%Y%m%d"010000 -d last-sunday`) bbb=(777 猫 `date +"%Y%m%d"150000 -d last-Saturday`) ccc=(666 鳥 `date +"%Y%m%d"000000 -d last-friday`) for hoge in "$aaa" "$bbb" "$ccc" do if [ -e ~/${hoge[1]}_${hoge[2]:0:4}_${hoge[2]:4:2}_${hoge[2]:6:2}.mp4 ]; then exit 0 else ffmpeg -i ~/output/${hoge[2]}-${hoge[0]}.aac ~/${hoge[1]}_${hoge[2]:0:4}_${hoge[2]:4:2}_${hoge[2]:6:2}.mp4 fi done こんな感じのスクリプト書いたのですが、配列が展開してくれません。 どうすれば変数に入れた配列が機能するでしょうか アドバイスお願いします。 http://mevius.5ch.net/test/read.cgi/unix/1525337663/212
248: 名無しさん@お腹いっぱい。 [sage] 2018/06/07(木) 02:03:34.31 >>212 for hoge in "$aaa" "$bbb" "$ccc" "$aaa" "$bbb" "$ccc"は、最初のアイテムを示すだけ(888, 777, 666)で間違い "${aaa[@]"が正しいもしくはとしたかったのだろうが、だったらforの機能的にも変数をArrayにする必要はないだろう。その記述以下でなんかするのでないなら aaa/bbb/cccは単なる文字列として、for内で必要となったらArrayに分解すれば簡単に目的は達成するだろう (てか、配列にするならaaa/bbb/cccなんて個々の変数じゃなくてそれこそそれを配列にすればいいのにと思うけど) aaa="888 犬 `date +"%Y%m%d"010000 -d last-sunday`" ... for fuga in "$aaa" "$bbb" "$ccc" do hoge=$($fuga) if [ -e ~/${hoge[1]}_${hoge[2]:0:4}_${hoge[2]:4:2}_${hoge[2]:6:2}.mp4 ]; then ... http://mevius.5ch.net/test/read.cgi/unix/1525337663/248
282: 名無しさん@お腹いっぱい。 [] 2018/06/08(金) 23:18:13.62 Excelから出力したCSVのように一行(?)の中に改行が含まれた データを扱うにはどうしたら良いでしょうか? もう少し具体的に書きます。 カンマ区切りのCSVデータだと仮定して、 シェルスクリプトの中に関数を一行ごとに呼び出し、 列を引数に対応させたいです。 例えば以下のような内容のファイルがあったとして a1,a2,a3,a4 b1,b2,b3,b4 c1,c2,c3,c4 syori "a1" "a2" "a3" "a4" syori "b1" "b2" "b3" "b4" syori "c1" "c2" "c3" "c4" という風にsyori関数を呼び出したいのです。 ただし実際には各項目(a1等の部分)にExcelから出力したデータのように 改行やカンマやダブルクォートやシングルクォートや空白が入ることがあるのです http://mevius.5ch.net/test/read.cgi/unix/1525337663/282
287: 名無しさん@お腹いっぱい。 [sage] 2018/06/08(金) 23:31:03.89 >>285 危険は承知で環境依存させたくないので、 シェルスクリプト(POSIX)だけでやりたいのです http://mevius.5ch.net/test/read.cgi/unix/1525337663/287
289: 名無しさん@お腹いっぱい。 [sage] 2018/06/08(金) 23:57:15.15 邪道としては、改行コードとか\を絶対に使われない文字に置換して最後にまた戻すとかやったな アルメニア文字とかに置換するんやで http://mevius.5ch.net/test/read.cgi/unix/1525337663/289
323: 名無しさん@お腹いっぱい。 [sage] 2018/06/10(日) 02:20:54.22 U+001EやU+001Fを区切り文字として利用してる方いらっしゃいますか? 結構便利(絶対に他の文字と衝突しない)だと思うんですが、そういうシェルスクリプトを見たことがありません。 http://mevius.5ch.net/test/read.cgi/unix/1525337663/323
345: 名無しさん@お腹いっぱい。 [sage] 2018/06/10(日) 16:07:14.39 > "Excelから出力したCSVのように" 一行(?)の中に改行が含まれた > データを扱うにはどうしたら良いでしょうか? > カンマ区切りのCSVデータだと "仮定して" 、 > 今回はCSVではありませんが、 こう書いてあるのに、CSV形式だって思い込むのは 頭が悪いと思います。 http://mevius.5ch.net/test/read.cgi/unix/1525337663/345
422: 名無しさん@お腹いっぱい。 [sage] 2018/06/10(日) 22:50:59.99 >>420に補足すると、 (POSIXの範囲では)readは必ず改行コードでぶった切られる http://mevius.5ch.net/test/read.cgi/unix/1525337663/422
435: 名無しさん@お腹いっぱい。 [sage] 2018/06/10(日) 23:13:46.83 >>433 > それは元々のデータがそうであるってこと? ちょっと違うな 「元々のデータがそうであってもよい」ってこと 元々のデータ形式について指定はないのだから (処理するには効率の悪い)CSVデータでもOKだし、 どんなデータでもよい そのデータ形式も含めて、 どうしたらいいでしょうか?という話だ http://mevius.5ch.net/test/read.cgi/unix/1525337663/435
513: 名無しさん@お腹いっぱい。 [sage] 2018/06/11(月) 18:49:50.82 こいつもしかしてこの間の「標準入力と標準エラー出力を同時に操作したい」のアホか。 http://mevius.5ch.net/test/read.cgi/unix/1525337663/513
521: 名無しさん@お腹いっぱい。 [sage] 2018/06/12(火) 11:55:23.82 >>519 じゃあ、これ相当のことをやってみて cat /etc/password | grep /bin/bash | cut -d: -f1 (なんかブロックされたからパスワードを大文字にしてる) ここまで簡潔に書ける言語をシェルスクリプト以外しらない シェルスクリプトは(特定の用途に対して)最善だから使ってるんだよ http://mevius.5ch.net/test/read.cgi/unix/1525337663/521
538: 名無しさん@お腹いっぱい。 [sage] 2018/06/12(火) 18:46:13.86 俺はレスしただけだけど? >>529が書かなければ、この話をすることもなかった http://mevius.5ch.net/test/read.cgi/unix/1525337663/538
551: 名無しさん@お腹いっぱい。 [sage] 2018/06/12(火) 19:39:25.91 問題定義をはっきりせずに、回答に対して一方的にダメ出ししてるから当たり前だろ。 >>521 だって awk や perl の解は >>521 とほぼ同程度の記述量なのに (GECOS に /bin/bash とか書いてあっても誤動作しないという点ではむしろ優れてる) 「シェルスクリプト以外しらない」とかいう視野の狭さを撤回しないし。 ほぼすべてのプログラマーにとってシェルスクリプトってのは 第二・第三言語であって、シェルスクリプトが最適な用途なら使うけど、 そうじゃない場合があることは当然知ってて、 こんな風に威張って使うものじゃないんだよ。 インフラ担当ならシェルスクリプトが第一言語ってのもありうるけど、 そういう場合にはこんなに威張らないよなあ。 http://mevius.5ch.net/test/read.cgi/unix/1525337663/551
563: 名無しさん@お腹いっぱい。 [sage] 2018/06/12(火) 23:46:19.16 >>559 > あれあれ、じゃあこれ↑は、"grep向き" の問題ってことですかね?w 勿論そうだよ。 正規表現で書ける条件だったから、grepでうまくいった。 世の中には正規表現で書けない条件とかも当然あって、そういう場合 perlやawkなら自明にかけるけど、スクリプト言語使わずに シェルだけで書こうとすると面倒だったりする。 > 俺が言ってるシェルスクリプト向きの問題っていうのは > 既存のコマンドの実行と組み合わせが簡単に実行できるってことだよ それに反対してる人は誰もいないと思うよ。 それこそがシェルが特化している応用分野なわけで。 しかし>>521はそれを示す例題としてはよろしくない。 他の言語ならコマンドの組み合わせとかせずに容易に解ける問題だからね。 http://mevius.5ch.net/test/read.cgi/unix/1525337663/563
577: 名無しさん@お腹いっぱい。 [sage] 2018/06/13(水) 02:31:02.70 >>571 入力側のリダイレクトって読みにくいので、自分もcatで書くかも http://mevius.5ch.net/test/read.cgi/unix/1525337663/577
610: 名無しさん@お腹いっぱい。 [sage] 2018/06/14(木) 20:52:33.17 findでexecオプションの引数のあとにシェルに渡すパイプを付けるとexecに渡したコマンドがシグナル13パイプ破壊を出してくるんですけど どうにかなりませんかね。 今のところ/dev/nullに標準エラー出力を捨てることで解決してるんですけども。 find . -exec basename \{\} \; | head ↑これで再現するはずです。 解決するときはできればPOSIXの範囲でやりたいです。findのGNU拡張で解決できるならそれでもいいんですが メインPCがOS Xなので、最低でもBSD拡張、さらに言えばPOSIXに限定してほしいです すいません。 http://mevius.5ch.net/test/read.cgi/unix/1525337663/610
613: 名無しさん@お腹いっぱい。 [sage] 2018/06/14(木) 22:18:48.70 なにか最近やけに POSIX にこだわってる奴が多いが同一人物か? http://mevius.5ch.net/test/read.cgi/unix/1525337663/613
621: 619 [sage] 2018/06/14(木) 22:51:53.48 すまん間違えて送信しちゃった $ find /etc -exec sh -c 'basename {}' \; | head これでどうだろう。 -quitオプションはPOSIXの範疇ではないけどこれはPOSIXに準拠してる ちなみに>>610のコマンドラインはDebian GNU/Linuxのfind 4.7で再現した。 http://mevius.5ch.net/test/read.cgi/unix/1525337663/621
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.373s*