サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
qiita.com/richmikan@github
くだらないコメント拒否 この記事はPOSIX原理主義に基づいて書いている。POSIXを逸脱した途端、「どこでも動く」「コンパイル不要で動く」「10年、20年先もたぶん動く」という時空を超えた互換性を捨てることになる。 だからPOSIX原理主義な記事を書いているというのに、その意図を汲まずにするくだらないコメント、とくにheliac2000という著作権侵害も平気で犯す輩は絶対にコメントしないこと。 人によってひらがなだったりカタカナだったり 名簿入力フォームで名前とふりがなが集まったのだが、ふりがなが人によってひらがなだったりカタカナだったりするので統一したい。 という相談を受けた。 尚、ひらがなは全角文字にしか存在しない(MSXなど半角ひらがなを持っているコンピューターはあるのだけど一般的ではない)ため、全角文字前提での話とする。半角カタカナを扱いたい場合は、全角文字・半角文字の相互変換に
今日は12/24。今日もこのQiita上で一つ戦いを挑んできた。「Qiitaサポートは無能だ」と批判する記事だ。言っておくが、喧嘩が好きでやっているわけではない。権利とは戦って手に入れるもので、その手段だと思っているからやっているだけだ。そして、フリーランスはそれがやりやすい立場にある。私はそれを求めてフリーランスになった。この記事では「フリーランスなら、その立場を大いに活用して戦え」と訴える。 私のこと 私は来年で10年目を迎えるフリーランスだ。また、「常駐案件をこなしていたらそれは会社員と同じだ」というポリシーから、そういう仕事は半分以下に抑えるという目標を立て、めでたくその目標は現状20%未満で維持されている。よくここまで生き延びられてきたのもだ……。 フリーランス人生は、会社への批判から始まった 私は、修士課程を修了し、まずは会社員として社会人を始めた。フリーランスになったきっかけ
始めに言っておく。 はっきり言って、今のQiitaサポートは無能である。「口やかましい少数派」(後述)の奴隷だ。 自由の国アメリカでは星条旗を燃やすことも自由を保障するために許されているとは有名な話だが、良識のあるQiitaならいきなり消しはしないだろう。私は大真面目でこの記事を書いているのだから。 この記事では、なぜQiitaサポートが無能であると思うかという理由を書き、そして最後に改善案を書いて終わりにする。 事の経緯 この記事を書こうと思った理由は、Qiitaサポートによる理不尽な対応を自分がされたり、目の当たりにしたからだ。 私のケース 「品位が問われるAdvent Calendar ― シェルスクリプトはどこでも動く!」という記事だ。ただし今見られる内容は、Qiitaサポートにコメントを全部消され、お気に召すような修正を余儀なくされたものだ。 私は、このAdvent Calend
やってきました、Advent Calendar 2016。ここ数年毎年参加してきたので、よし「今年も」と思ったのですが…… 脳内の本音を喋る回路とTwitterを直結している人 Twitter上にこういう発言をしている人がいました。 "シェルスクリプトはどこでも動くと言ったな、あれは嘘だ" "echoコマンド一つでも、/bin/echoかシェルの組み込みコマンドかを意識しないといけないの、はっきり言って現代人のやることじゃない" "シェルスクリプトのプロジェクトに「curlが無いときは?」「whichコマンドが無いときは?」という性格の悪いプルリクを投げるの好き。" まぁ、もう誰とは言いませんけどね。1 ここには反論を書くことにしました 誰とは言いませんが、このAdvent Calendarの関係者の発言とだけは言っておきます。で、こうして品位を欠いた状態の場所にまともな話題を書いても不毛
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
“`〜`”と“$(〜)”は、単純には置き換えられない! “`〜`”と“$(〜)”は、どちらも中の文字列をコマンドとして解釈し、その実行結果を返す文法であるが、必ずしも素直に置き換えることはできない。 その例をまとめることにした。 “$(〜)”は素直に入れ子にできるが、“`〜`”は酷く複雑になる 例えば、“$(〜)”の中に“$(〜)”を用いて、次のようなコマンドを書いても正しく動作するが、
時間の計算もShellScriptの泣き所だった シェルスクリプトが敬遠される理由の一つ。それは時間の計算機能が弱いところだ。例えば、 今から一週間前の年月日時分秒は?(それより古いファイルを消したい時など) Ya年Ma月Da日とYb年Mb月Db日、その差は何日?(ログを整理したい時など) この年月日は何曜日?(ファイルを曜日毎に仕分けしたい時など) といった計算が簡単にはできない。dateコマンドの拡張機能を使えばできるものもあるが、できるようになることが中途半端なうえに、OS間の互換性がなくなる。これを解決する方法がこのTipsだ。 UNIX時間との相互変換ができれば一気に解決 前述のような日時の加減算や2つの日時の差を求めるなどといった時は、一旦UNIX時間に変換して計算し、必要に応じて戻せばよいことはご存知のとおり。曜日を求めるのだって、UNIX時間変換の値を一日の秒数(86400
どんなコマンドでも上書き更新OK シェルスクリプトでは通常、(追記ではなく)ファイルの中身を書き換えたいと思ったら一時ファイルに新しい中身を書き出してから、元のファイルに上書きしてやるしかない。 単独のsedコマンドやnkfコマンドで済む場合は、それらのコマンドが個別に対応している場合もあるが、そういうのは運がよい場合だけ。どんなコマンドでもできるようにはならないものか? →なります こたえ 更新のために通したいコマンドが、CMD1、さらにCMD2、……、であって、更新したいファイルパスが$fileの中に格納されていたとすると、次のコードを書けば実現できる。 ただし、使用上の注意があるから、最後まで読むこと! なぜこれでうまくいくのか? UNIXにおいて、rmコマンドなどによる削除(unlink)は、ファイルの実体を消すのではなくinodeと呼ばれる見出しを消すだけであることは御存知のとお
この投稿は、POSIX原理主義者以外には何の価値もない変態記事だ。また、GNU AWKやzshを常用している人にも価値がない。以上に該当する方は、黙ってこの記事を閉じよう。 シェルスクリプトはバイナリデータを読み書きできない POSIX原理主義者である私は、Base64エンコード/デコードをするためにPOSIX標準ではないbase64コマンドに依存するのが嫌だった。そこで、POSIX標準コマンドだけで作ってしまえと思ったのだが、そこには大きな壁が立ちはだかった。 シェルスクリプトはバイナリデータを加工できないのである。全然扱えないのではなく、まともに扱えないと言うべきかもしれないが……。 Base64コーデックを作りたければ、バイナリデータの読み書きができなければならない。ところが次のコマンドを手持ちの環境で実行してみればまともに扱えないことがよくわかる。
シェルスクリプトから単純なメール(日本語)を送る方法は以前に紹介しましたので、もうできますね。 今回は、さらに添付ファイルを付けて送りましょう。この技法さえ習得すれば、毎日生成するログファイルを、定時にcronで自動的にメール送信することもできますし、或いはatコマンドを併用し、予め用意しておいた本文と添付ファイルを指定日時に予約送信するなんてこともできます。 必要なのはたったこれだけ 添付ファイルを送るとはいえ、必要なものは添付ファイル無しの時と同じで、次の3つだけです。 メールを送信できるホスト (これ最重要) Bourneシェル(素のshでも、bashでもdashでもkshでもzshでも) sendmailコマンド(大抵は /usr/sbin あたりに入ってます) これだけあればOK。つまりPOSIX(UNIXで必須のもの)以外で必要なものはsendmailコマンドを備えた主要MTA
この投稿は、某秘密結社の幹部が、世を忍ぶ仮の一般人としてお送りします。 【2015/01/16】戦いを挑んだ結果はこちら!(→結果にワープ) 【2015/01/14改訂】Straming APIのオマケ話を追加しました。(→オマケへワープ!) 明後日、金曜ロードSHOW!に、アイツがまた来る! 今週(2016/01/15)、金曜ロードSHOW!であの「天空の城ラピュタ」が放送されるってご存知でしたか? そうです。あの、伝説のクジラを呼び覚ます禁断の呪文「バルス」をTwitter民に唱えさせる、それはそれは恐ろしい映画です。 この呪文が唱えられる予想時刻は、日本時間で2016年1月15日23時21分頃と言われています。 シェルスクリプトで戦いを挑みたい! あの「バルス」に、無謀にもシェルスクリプトで戦いを挑もうと目下準備中であります。 戦いとは何か……、上映中にTwitter民が唱える「バル
この記事は、POSIX原理主義の思想で世界征服を目論む秘密結社シェルショッカー日本支部がお送りします。 物語に登場する名称は一部を除き架空のものであり、実在する人名・団体名等とは一切関係ありません。 Twitterリア充祭、絶賛開催中 全世界70𥝱人(70𥝱人=70,000,000,000,000,000,000,000,000人)のプログラマーどもよ、メリークリスマス。私こそ秘密結社シェルショッカー日本支部のリッチー大佐である。 こんな時間に、しかもクリスマスの夜にQittaを訪れているお前たちなら当然、ひとりでネットと戯れているはずだな!しかし、ネットの向こうには、カノジョやデートスポット、高級な料理の写真とともに自分がいかに勝ち組であるかをTwitterでひけらかすリア充どもが、今まさに増殖している。しばらくの間、Twitterを開けばそんな奴らのツイートが洪水のように押し寄せる
Webサーバーログ解析で使いたかった Webサーバーのログを見ていると、検索ページからジャンプしてきている形跡があった。しかし、検索キーワードはURLエンコードされた状態であり、デコードしないとわからない。果たしてどんなキーワードなのか興味があった。 そこで、FreeBSDのportsに収録されているurlendecというプログラムをサクっとインストールしようとしたら…… # cd /usr/ports/net/urlendec # make install ===> urlendec-1.0 is only for i386, while you are running amd64. *** [install] Error code 1 Stop in /usr/ports/net/urlendec. # これだから、POSIX準拠でないコマンドは信用ならんのじゃ!!! しょーがないので
この記事の説明 POSIX規格で用意されているコマンドとその概要が一覧できるページ(チートシート)が欲しいという要望をもらった。もちろんThe Open GroupのPOSIXのページへ行って、1つ1つのコマンドのページを開けばわかることはわかるのだが、概要という形では一覧できない。 確かにそうだと思ったので、生成することにした。もちろんPOSIX原理主義(極力POSIXの範囲のコマンド)1で。 そこはやっぱ意地でしょ。 というわけで、まずは生成したチートシートをどうぞ。 これが、POSIXの範囲で使えるコマンド一覧だ! admin - create and administer SCCS files (DEVELOPMENT) alias - define or display aliases ar - create and maintain library archives asa -
実験してみよう Linuxで、一般ユーザー権限と、root権限のどちらも所有しているホストがある人は次の操作を試してみてもらいたい。 Using username "GENERAL_USER". ← 1)一般ユーザーでログイン GENERAL_USER@your.server's password: Last login: Mon Jul 13 00:00:00 2015 from your.client $ su - ← 2)rootになる Password: # su -m apache ← 3)別の一般ユーザー(例えばapache)になる bash: /root/.bashrc: Permission denied ← (とりあえずこのエラーは気にしない) $ echo HOGE >/dev/stderr ← 4)標準エラー出力に文字列を出力してみる ??? ← (果たしてどういう挙
この投稿はクローラー/スクレイピング Advent Calendar 2014の12月25日用です。 199X年。核戦争によって荒廃した時代に、ジャギという男がいた。 「おいお前、普段使っているシェルの名前を言ってみろぉ」 弟ケンシロウに成りすまし、そう言っては、“Bourne Shell”と答えない平民達を虐殺するという悪行を繰り返していた。弟の名に頼り、銃に頼り、人質に頼り、含み針に頼り、そしてガソリンという切り札に頼ったその男は、己の肉体のみで闘う弟によって、無様な最期を遂げた。 さて題名にもあるとおり、この記事は「POSIX原理主義」、つまりUNIX系OS最小インストール時に使えるコマンドだけでスクレイピングします。立派な言語やライブラリーがあったらスゴいスクレイピングができて当たり前。それだと道具がスゴいだけで、「自分はノーアイデアです」と言っているようなものです。 しかしながら
どのUNIXでも通用するロック機構はあるのか? 他言語では大抵用意されているロック機構であるが、シェルスクリプトにはロック機構を直接実現するコマンドが無い。flockコマンドやlockfコマンドなどOSによっては独自コマンドがあるが、OS独自ゆえ、それらを使ってしまうとシェルスクリプトの可搬性は失われてしまう。(しかも前述の2つのコマンドは、ファイルロックのコマンドであるうえに、ロックがかかっている間は次の行に進めない) 「特定のOSに縛られてしまうくらいなら他の言語を使う方がよっぽどマシだ」といって、シェルスクリプト信者(POSIX原理主義者)を増やせないのが悔しかったのだが、ようやく作るのに成功したので報告する。 これで、 排他ロック…………………pexlockコマンド 共有ロック…………………pshlockコマンド セマフォ……………………(pshlockコマンド、共有ロックの応用)
特定コマンドの正規表現で使えるメタ文字が何だかわからない! 正規表現自体は知っているけど、それが今から使おうとしているコマンドで使えるものなのかわからずに困っている人も多いと思うのでまとめてみた。 たった3つの正規表現メタ文字セットだけ知ればいい コマンドによって、対応している正規表現メタ文字の範囲には違いがある。しかし、最低限知っておけばよいのは2種類+1サブセットの3つだけだ。 BRE(基本正規表現)メタ文字セット ERE(拡張正規表現)メタ文字セット AWKのサブセット もちろん、これ以外にもGNU拡張正規表現メタ文字セットやPerl拡張正規表現メタ文字セット、JavaScript拡張正規表現メタ文字セットなどいくつかあるのだが、「どのUNIXでも(=POSIXで)使える」という特長を持たせたいのであれば、それらは覚えても意味がないので上記の3つさえおさえておけばよい。(例えPOSI
0001 f 1922 フグ田 サザエ sazae@fuguta.sazae3 0002 m 1895 磯野 波平 namihei@isono.sazae3 0003 f 1901 磯野 舟 fune@isono.sazae3 0004 m 1917 フグ田 マスオ masuo@fuguta.sazae3 0005 m 1938 磯野 カツオ bonito@isono.sazae3 0006 f 1942 磯野 ワカメ wakame@isono.sazae3 0007 m 1947 フグ田 タラオ tarao@fuguta.sazae3 0008 ? ? 磯野 タマ tama@isono.sazae3 この人々にメールマガジンを送る。ただし宛先にはBcc:フィールドを用いて、会員同士にはアドレスが知られないようにすること。 ……という作業を、シェルスクリプトを使って、しかもスマートに行う、
気が利いてるのか、お節介なのか ロケール環境変数(LC_*やLANG)を認識してくれるGNU版のgrepやsed、AWKコマンドの正規表現は、キャラクタークラスを用いた場合、全角の文字を半角で対応する文字と同一視してくれます。 知ってました? それを知らずにハマったことのある人には、「なんてお節介な!」と思える機能かもしれませんが、知っていれば便利な機能です。 [[:alnum:]]で試してみる 正規表現にはキャラクタークラス指定というものがあります。例えば[[:alnum:]]は、アルファベットと数字にマッチするクラスです。 UTF-8やEUC-JPなど、マルチバイト文字に対応するようにロケール環境変数が設定されていると、sedやAWKにおける[[:alnum:]]は全角文字にも反応します。 $ echo 'MSX MSX2 MSX2+' | sed 's/[[:alnum:]]/*/g
こんにちは。 今日もいい天気ですね。 : ♪なんだかんだ~ : : (途中は何行あるかわかりません) : ♪どーしたこーした~ ホゲーィ! : さようなら。 . この最後の一行だけを取り除いて出力したい時、どう書きますか? (ヒント:このTipsのタグ) Thinking time : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : こたえ
平日・休日ログを自動的に仕分けしたい ある仕事で、土日祝日のログを自動的に休日扱いしたいという要望があった。 土日だったらすぐにわかるけど、祝日ってどうすりゃいいのよ。 月日固定の日付や振替休日はいいとして、春分の日と秋分の日は調べようがないでしょ。 (註:春分と秋分は、毎年天文観測によって二年後の月日が決められます) 休日設定ファイルでも作って毎年打ち込んでもらうしか……、と思っていたら Google先生が囁いた。 Google Calendar APIを使いなさい。 Google先生への質問状 というわけで、さらに詳しくGoogle先生に聞きつつ、ささーっと作ったのが下のシェルスクリプト。 #! /bin/sh # このURLは # Googleカレンダーの「カレンダー設定」→「日本の祝日」→「ICAL」から取得可能 # (2017/01/12現在) url='https://cale
問題 この問題、解けるだろうか? 標準入力から与えられるテキストデータで、見出し行(インデント無しで大文字1単語だけの行と定義)を除去するフィルターを作れ。 ただし、それ以外の変化は一切させないこと。 例えば入力テキストデータの最後が改行で終わっていない場合は、出力テキストデータも改行で終わらせてはならない。 問題文の前半だけなら簡単だ。grepコマンド1個で簡単に書けてしまう。
困った時はすぐQiitaを始めとしたTipsを表面的に鵜呑みにし、使えそうなプロダクトを拾ってきてマニュアル通りに対応するプロダクト至上主義者達よ。そんなことでは、想定外の事態に見舞われた時すぐ死ぬぞ。想定外とは、マニュアルには載ってないから想定外なのだ。マニュアル通りにしか動けぬ者は、典型的なコンビニ店員の如く薄給に喘ぐだけ。頭を使え!UNIX哲学に目覚めよ!そしてPOSIX原理主義を崇拝せよ! Follow
Bash使いたくないけどPIPESTATUSどうしよう…… そんなアナタに耳よりな話。POSIXの範囲、つまりどのUNIXシェルでも同等のことができるというお話です。 元ネタはコチラですが、ここで例示されているコードでは、繋ぎたいコマンドが増えるとやがて動かなくなるので修正版を公開します。 1)次のシェル関数を定義 まずは、PIPESTATUSのように、全ての戻り値を集めたいコマンドパイプ列を書こうとしているシェルスクリプトの冒頭に次のシェル関数を追記します。 run() { local a j k l com # ←ここはPOSIX範囲外なんだけど…… j=1 while eval "\${pipestatus_$j+:} false"; do unset pipestatus_$j j=$(($j+1)) done j=1 com= k=1 l= for a; do if [ "x$a
2014/09/26更新: 本日新たに公開された再修正版を適用するように、情報を更新しました。恐らく、24日のは暫定対応版で今回のリリースが正式対応版だと思います。緊急性については前回のレベルほど高くありません(が、前回の作業を行っていない場合は急ぎましょう)。 Bash使い(特にBashのCGIスクリプト書いてる人)は一刻を争うべき 2014/09/24に発表されてたBash脆弱性。 上記サイトに概要が書いてありますが、何が一番ヤバいかと言えばBashで書いたCGIスクリプトを動かしているサーバーだと私は思います。 詳しくは書きませんが、telnetコマンドで簡単に悪意のあるコードを仕込めました。悪意あるコードが、rmコマンドだったりしたら。取り返しが付きません。 解決法(RedHat、CentOS等) yumコマンドやrpmコマンドでパッケージ管理をしているRedHat系(CentOS
今、東京メトロのコンテストが熱い! ウワサでは知っていると思うが、今、東京メトロが設立10周年を記念して「オープンデータ活用コンテスト」というのをやっている。 駅の設備はもちろん、リアルタイムの列車位置なんかも公開するという大盤振る舞い。「これで役立つアプリ作ってね」ということなのだが、じゃあ俺がシェルスクリプトで何か作ってやろうじゃないかということで書いてみたので紹介する。 WebAPIの仕様はコンテスト応募予定者限定公開なので作ったソースコードも公開はできないのかなと思っていたら、開発者フォーラム内で「アクセストークン(後述)出さなければソースコードも公開OK」という回答があったので、公開に踏み切ることにした。 接近情報表示コマンド「メトロパイパー」 まず接近情報とは何かだが、駅のホームへ行くとそこの電光掲示板に表示される 【こんど】快速 東葉勝田台行 【つぎ 】各停 西船橋行 とか(
おことわり このTipsは不作法だとして異論が出るかもしれないが、私自身がよくやるのでここで公開してみる。それは一体何かというと…… コマンドヒストリーが残るのイヤだ! と思うことってよくないだろうか? 開発環境で、後に再利用することは到底ありえないくらい長ーいワンライナーを書いたり、あるいは rm -rf * みたいなキケンなコマンドを実行したりして、ログアウト後にそういうのを残したくない、と思うこと。 そんなアナタにオススメのTipsだと思う。 次のコマンドを実行すればOK
次のページ
このページを最初にブックマークしてみませんか?
『@richmikan@githubのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く