エラーメッセージ(標準エラー出力)は表示しない エラーメッセージは不要、という場合は「2> /dev/null」で標準エラーメッセージを「/dev/null」へリダイレクトします(画面10)。「/dev/null」というのは「ヌルデバイス」という特別な場所で、ここへの出力は全て破棄され、どこにも出力されず、保存もされません。
「別のシェルで実行する」場合との違い「シェルスクリプト」を実行する場合、通常は「source」および「.」を使いません。次のように、「bash」などの引数として実行するか、シェルスクリプトに実行権を付けて実行します。 bashの引数として実行する例 bash script.shchmodで実行権を付けてから実行する例 chmod +x script.sh ./script.shこれらは、実行中のインタラクティブシェル(対話的シェル)とは別のシェルでスクリプトを実行します。 これに対して、「source」および「.」は実行中のインタラクティブシェルでファイル中のコマンドを実行します。 たとえば、次の内容で「script1.sh」を作成したとします。 #!/bin/bash HOGE=hoge echo $HOGEシェル変数「HOGE」に文字列「hoge」を設定し、出力するだけのスクリプトです
シェルスクリプトは変数代入で = の前後にスペースを置けない!・・・の本当の理由を知ると優れた文法が見えてくるShellScriptBashUNIXshellPOSIX はじめに シェルスクリプトの変数代入で = の前後にスペースを置くことができない理由は、検索すれば「プログラマーの君! 勘違いするな! シェルスクリプトでは読みやすさのためにスペースを置くな!! という話」のような記事がすぐに見つかります。記事に書いてあるとおり変数代入とコマンド呼び出しと区別がつかないからです。それは間違いではないんですが、私はもう少し説明が足りないと感じています。そこで今回は = の前後にスペースを置けない本当の理由を解説したいと思います。 の前に皆さんにはこの話を読みながら、自分がシェルスクリプトの言語設計者だったとしたら、どういう言語仕様にするかを考えて欲しいです。なぜかと言うとシェルスクリプトの文
この記事は自作OS Advent Calendar 2020 7日目の記事となります。 はじめに 現在のオープンソースOSは、たとえばLinux開発ボードであればボードベンダーから移植済みのLinux環境が提供されたり、たとえばNetBSDであればクロスコンパイル環境が整備済みでドキュメントも用意されていて、最低限の移植作業で移植が完了したりします。 ぼくがNetBSDを移植した当時(1993年)はそうではありませんでした。ドキュメントもなくいろいろ手探りで、それも一人でやらざるを得ませんでした。苦労話のことは置いておいて、技術的にどういう物が用意され何を調べてどういう手順で移植していったかを記録に残せればと思います。(って前置きした割に苦労話が多いような気がします、すみません) かなり昔の話なので、けっこう忘れてることも多く、微妙に記憶が間違っていたりすることも、順番が前後していることも
■ bash の危険な算術式 _ 使ってる人がいちばん多いだろうからタイトルでは bash としてるけど、ここで取り上げることは zsh および ksh 一族(本家 ksh、pdksh、mksh)にも該当する。ash、dash などでは該当しない。 _ 以下のシェルスクリプトには脆弱性がある。わかるだろうか。 #!/bin/bash # "品目,単価,個数" の形式の CSV を読んで、"品目,合計金額" の形式で出力する csv="foo.csv" while IFS=, read item price num; do echo "$item,$((price*num))" done < "$csv" これ、細工された CSV ファイルを食わせることで、任意コードの実行ができてしまう。数ある脆弱性の中でもとくにヤバいやつだ。どこが穴なのかというと、タイトルにもあるとおり算術式なのだが、し
今回の「業界に痕跡を残して消えたメーカー」は、PCメーカーから外れるがSun Microsystemsを紹介したい。COMPAQなどと激しく市場を戦い、最終的に敗れていった企業だからだ。 BSD UNIXを採用したSunOS搭載マシンで 着実に知名度を上げていく Sun Microsystemsは1982年、スタンフォード大学に近いPalo Altoで立ち上がった。創業者はVinod Khosla、Andy Bechtolsheim、Scott McNealyの3人で、いずれも元はスタンフォード大の学生であった。 また会社設立直後に、カリフォルニア大学バークレー校のBill Joyが加わっており、この4人を創業者とみなすことが多い。
テキストファイルを閲覧するためによく使うのがlessコマンド。特に巨大なファイルを開く時などは必須でしょう。Gバイト単位の巨大なファイルをVimやEmacs、その他のテキストエディタで開くと、メモリを大量に消費して最悪OSが反応無しとかになります、、、 また、コマンドの出力結果をパイプでlessに渡し、出力結果をジックリ観察するのに重宝します。普段何気なく使っていらっしゃる方々が多いと思うが、改めて使い方の確認をしてみると、何かしらの発見があるかもしれません。 起動時オプション 各オプションには、短いショートオプションと長いロングオプションがあります。設定ファイルに記載する場合は分かりやすいロングオプション、コマンド実行時にはタイプ数が少ないショートオプションを使うと便利でしょう。特に-X/--no-initオプションは案外知られていないかもしれません。終了時に画面が消えてショボーンとなる
LinuxなどのUNIX系OSのコマンドに「su」というのがありますが、これが「switch user」の略だと思っている人が多いですね。 かくいう私も長い事そう思っていた時期がありました。 あるいは「super user」派も多いです。 では、正しくはなんなのか? 「substitute user identity」の略だそうな。 substituteって英語力の無い自分には馴染みの無い単語だったので、Yahoo!辞書でひいてみました。 [名] 1 (…の)代わりをする人[物],代理人,身代わり,代役,補欠,代用品,代用食((for ...)) なるほど、な感じですな。 ちなみに初期の頃は「super user」の略だったようです。 その頃は名前の通り、rootになる機能しか無かったと。 その後、任意のユーザになる機能も付与され、「substitute user identity」の略に
dash is not bash #!/bin/sh offset=(`ls`) echo $offset みたいなシェルスクリプトがあって、こいつを Ubuntu で実行すると $ ./foo.sh ./foo.sh: 2: ./foo.sh: Syntax error: "(" unexpected というようにシンタックスエラーが発生した。shebang の /bin/sh ではなく /bin/bash として実行すると $ bash foo.sh $ とエラーにはならない。 シンタックス的に OK そうな foo.sh が一つ目ではなぜエラーになったかというと、ubuntu の /bin/sh は Almquist shell (ash) から派生したシェル Debian Almquist shell(dash) へのシンボリックリンクになっており、bash で OK な( … )
ふみやす@元シェルまおう(自称でない) @satoh_fumiyasu Perl では最初に use strict; use warnings すべきなように、シェルでは set -u すべき。「例外処理って何? おいしいの?」って人は set -e もしておけ。 2012-06-25 18:25:20 ふみやす@元シェルまおう(自称でない) @satoh_fumiyasu シェルスクリプトをまともに書けない奴は、それでも書かなければならないときは、とりあえず変数展開するとき必ずダブルクォートで括れよ。$foo じゃなくて "$foo” な。あと最初に set -u; set -e でもしておきな。シェルスクリプトが駄目なんじゃなくて、書けないだけ。 2012-12-22 00:27:38
プロジェクト移行期に入って暇な時間ができたので、開発環境をリフレッシュすることにした。vim や zsh の設定が少しずつ壊れてきていたのだった。 .vimrc や .zshrc を眺めてみると、かつて意識が高かった頃に施した設定が何のためのものだったのか忘れてしまっていた。別人が書いたスパゲティコードのようだった。 また vim や zsh の設定を検索して理解するべきなんだろうか。ここで覚えた知識はまたすぐに忘れてしまうんじゃないだろうか。設定が洗練されるほどに、それを更新する機会もまた少なくなってくる。設定が必要になるきっかけは忘れた頃にやってくるもんだ。 やり方を根本的に見直す時期なのかもしれない。新しいツールもいまなら選択できる。 まず、vim から atom に移行した。git のコミットメッセージやちょっとしたファイルの修正ではまだ vim を使うものの、細かい設定が必要にな
本記事が切っ掛けとなってお声がけを頂き、本記事の増補リファイン版となる記事をSoftwareDesign 2018年1月号のシェルスクリプト特集第2章として執筆しました。リファイン版には、この記事で触れていない文法面での分かりにくさについての解説が含まれています。その文法面での分かりにくさの解説の一部に相当する記事もありますので、ぜひそちらも併せてご覧下さい。 Shell Script Advent Calendarをご覧の皆様、図々しくも5日目に続く2度目のエントリーのPiroです。 前回は自作のBashスクリプト製Twitterクライアントをネタに実装を解説しましたが、今日は他の言語で多少のプログラミング経験はあるんだけど、どうにもシェルスクリプトは苦手だ……という人のための、シェルスクリプトによるプログラミングの勘所を解説してみようと思います。多分、プログラミング入門レベルの人や上級
1984年10月,東京工業大学,慶應義塾大学,東京大学のUNIXマシンが接続され,JUNETとよばれるネットワークが誕生した。JUNETは,電話網の上に構築されたネットワークであったが現在のインターネットの基礎となったネットワークである。単にサービスを提供するだけでなく,人と人のつながり,つまりコミュニティーを生み,そこから次世代の計算機環境を考えるグループが誕生した。これがWIDEプロジェクトである。ここではInternet Protocol version 6(IPv6)の開発に関わる活動をはじめとして,グローバルなインターネットに資するさまざまな研究が進められてきた。本稿では,今年25年を迎えるWIDEプロジェクトの取り組みの歴史と成果,今後の展望について述べる。 日本で現在のインターネットにつながる活動のスタートは,1984年10月のJUNETの始まりにさかのぼることができる1)。
使える計算機環境が増えたのでそれぞれのベンチマークをとってみる。 ベンチマークソフトはUnixBenchを使う。 さくらVPS Ubuntuをインストールしてあるので、aptでビルド環境を入れた後、UnixBenchをビルドして使う。 ビルドツールを入れる。 $ sudo apt-get update $ sudo apt-get install build-essential UnixBenchはGitHubで公開されているので取ってこれるようにgitツールも入れる。 $sudo apt-get install git git cloneする $ mkdir unixbench $ cd unixbench $ git clone https://github.com/kdlucas/byte-unixbench.git . あとはRunするだけで、必要なソースコードのビルドからベンチマ
「われわれがマイクロソフトを嫌っていたのではない、マイクロソフトがわれわれを嫌っていたのだ」――日本のソフトウェア技術者であり、Rubyの父とも呼ばれるまつもとゆきひろ氏は、日本マイクロソフトが主催する開発者向けイベント「de:code 2016」でこう語った。一体何があったのか。 「オープンソースソフトウェア」の誕生 その歴史は、1996年までさかのぼる。当時、米Microsoftが開発していた「Internet Explorer」の機能強化により、それまで大きなシェアを獲得していたNetscape CommunicationsのWebブラウザ「Netscape」シリーズとの2大ブラウザ戦争が勃発した。その後、Internet Explorerはますます勢いを増し、この勢いに押されたNetscapeは1998年1月にNetscape Navigatorを無償化。しかしシェアの巻き返しには
ICSE 2016勉強会に参加するために論文リストを確認していたら、40年間のC言語のプラクティスの変遷を追った論文がおもしろかったので紹介する。 対象の論文 論文: The Evolution of C Programming Practices: A Study of the Unix Operating System 1973–2015 論文中で使われれたデータ: https://github.com/dspinellis/unix-history-repo 要約 過去40年間のUnixのソースコードを分析し、コーディングスタイルの変化を調査した。その結果、以下のことが分かった。 新しい言語機能は価値のあるものならば採用される レジスタ割り当てをコンパイラに任せるようになる スペースをどこにいれるかなどのコードの書き方が統一されていく 分析対象 1972年以降にリリースされた計66個
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く