$ wget --random-wait -r -p -e robots=off -U mozilla http://www.example.com
$ wget --random-wait -r -p -e robots=off -U mozilla http://www.example.com
こんにちは、hachi8833です。社内Slackで見かけたmorimorihogeさんの以下の書き込みで目から鱗が落ちました。 ~/.bashrcで何かを出力してしまうと、rsyncなどのsshパイプで問題が生じることがあるそうです。 参考: 知らないとrsyncでもハマるシェル初期化 - Qiita これをきっかけに、できるかぎり一次情報を元になるべく一般的になるようにまとめてみました。 シェルスクリプト(.bashrcや.bash_profileなども含む)はあまりに自由に書けてしまい、LinuxディストリビューションやmacOSによって作法がまちまちだったりするので、外してはいけないポイントがどこかを知りたかったのでした。 対象はbashとsh(Bourne Shell)に限定します。また、デスクトップGUIの設定ファイルについては最小限にとどめます。 bashのmanページ 元記
array=(word)と書くとカッコの中が単語に分割され それぞれの単語が配列arrayの要素として格納される IFSを改行のみのしておくと、1行が1要素の配列になる #!/bin/sh #linenum.sh if [ $# -ne 1 ]; then echo "Usage: linenum_bash.sh filename" exit 1 fi IFS=$'\n' #ファイルを配列に読み込む file=(`cat "$1"`) ln=0 for line in "${file[@]}"; do ln=`expr $ln + 1` printf '%3d %s\n' "$ln" "$line" done $ ./linenum_bash.sh arith.sh 1 #!/bin/sh 2 #arith.sh 3 x=5 4 y=9 5 z=13 6 a=`expr $x \* $y`
Linuxでcoreutils が利用可能なら、timeout コマンドを使いましょう。なお、Mac であれば brew install coreutils して gtimeout が使えます。 timeout Usage: timeout [OPTION] NUMBER[SUFFIX] COMMAND [ARG]... or: timeout [OPTION] man には以下のように書かれています。デフォルトの挙動が使いやすそうです。 コマンドがタイムアウトし、--preserve-status が指定されていない場合、 終了ステータスは 124 になります。それ以外の場合、COMMAND の終了ステータスが 終了ステータスになります。シグナルが指定されていない場合、タイムアウト時には TERM シグナルが送られます。この TERM シグナルにより、TERM シグナルをブロック もしく
Bashでスクリプトを書く際によく自分が使っている小技や関数などです。 またBashでは他のプログラミング言語以上に$や:などの記号の使い方が独特でググラビリティが低いので、基本文法などもチートシートとしてまとめておきます。 基本文法 変数と配列 制御構文 while for-in if - elif - else if文のone-liner 文字列比較 文字列が等しい (=) 文字列が等しくない (!=) 空文字、文字列長が0 (-z) 空文字でない、文字列長が0でない (-n) 数値比較 数値が等しい (-eq) 数値が等しくない (-ne) 数値がより小さい (-lt) 数値がより大きい (-gt) ファイルの判定 存在する (-e) ファイルである (-f) ディレクトリである (-d) シンボリックリンクである (-L) 関数 便利なスニペット 実行スクリプトがあるディレクトリを
他の言語をを書き慣れてから、シェルスクリプトを書こうとするとしょうもない部分でハマったりすることがあります。「簡単な処理だからシェルスクリプトで書くか」と思っても無駄に時間がかかってしまっては仕方ないですよね。 今回は初めてシェルスクリプトを書くときに、ハマりそうな点について説明をしたいと思います。 実行権限をつける 単純にファイルを生成しても下記の用に実行しようとしても実行はできません。 # touch test # ./test sh: ./test: Permission denied # touch foo # ./foo sh: ./foo: Permission denied これはファイルに実行権限がついていないため、起きる現象です。 chmodコマンドを使って実行権限をつけてやりましょう。 # chmod +x test # ./test # chmod +x foo #
bash で以前実行したコマンドを ↑ キーや Ctrl+p、Ctrl+r で検索すると思います。 このとき、 以前実行したコマンドの引数を一部変えて実行したいから history からコマンドを探して一部だけ書き換えようと思っていたのに間違えて Enter を押してそのまま実行してしまった ↑ キーや Ctrl+p で履歴を辿っている途中に間違ったコマンドを実行してしまった などのオペレーションミスをしたことがある方、いらっしゃると思います(ローカル環境とリモート環境を行ったり来たりしているとミスしがちな気がします)。 history を保存しないようにすれば(set +o history など)上記のようなオペレーションミスは防げそうですが、コマンドの履歴が見られないのは不便です。 そこで、history からコマンドを実行できなくしつつ、コマンドの履歴は見られるようにする設定を検証し
リリースされたばかりのWindows10 Anniversary updateを適用しました。 目当てはBash(Ubuntu) on Windows。早速開発者モードを有効にしてセットアップ! どれどれ、ほかに変わったところは無いかな。 ん・・・!? SSH Server Broker、SSH Server Proxy is 何? ためしに管理者のユーザー名、パスワードを入力して、ポチッとな! コマンドプロンプトが使えました。 ア カ ン v4/v6 Listen、ファイアウォール全許可 ローカルListenしているだけで、ネットワーク越しには使えないよね常識的にかんg・・・ 0.0.0.0:22、[::]:22でListenしている。 Windows Firewallの様子はどうかと思うと・・・ 全許可。なんということでしょう。 Bash on Windows利用時は注意 目玉機能の一
二十五日半狂乱、2日目の記事. 実行中のプロセスをkillしたいが、対象のプロセスをkillすると子プロセスがゾンビ化しちゃうからプロセスツリーを丸ごとkillしたくなった. どうせならkillコマンドっぽくプロセスIDで指定して、指定したプロセスをrootとしてツリーの葉から根に向かってツリー上のプロセスをkillして回りたい. 車輪の再発明の匂いがプンプンするので、「そんなのこうすれば一発じゃん.」ってのがあったらご指摘いただけたらと思います.(※議論し尽くされていました) 追記:後日、↑のリンク先にある"より良いコード"について書いたので、こちらも参考をば. コードはgithub上に上げた. doi-t/killpstree READMEにも書いたけど、目的を達成するシェル関数*1は気持ちいいくらいにシンプル. killpstree(){ local children=`ps --p
CentOSやUbuntuといったLinuxをコンソールで使っていれば、必ず使ったことがあるであろうbashのhistory機能。 この機能、結構いろいろなことができるので、今回はそれらを紹介していく。 1.基本的な使い方 ただhistoryコマンドを実行して今までの履歴を確認する、といった使い方。 一度は使ったことがあるだろう。 [test@BS-PUB-CENT7-01 ~]$ history 1 cd 2 passwd 3 clear 4 exit 5 passwd 6 clear 7 pwgen 8 clear 9 exit 10 passwd 11 clear 12 passwd -S ユーザID 13 exit 14 cd 15 history 2.履歴番号を指定して再度そのコマンドを実行する historyコマンドで出力された内容から、再度実行したい履歴番号を指定して実行する
シェルスクリプト神から教えていただいた。忘れないように書いとく (追記)聞いて、自分の記憶した内容をそのまま書いちゃったので、ちゃんとマニュアル通りか確認してなかったので反省 $ man bash 目次 xargsでfunctionを叩く 連想配列もどき 変数間接参照 なんでもかんでもawkで整形しない 文字列の末尾から数えて○文字目を△文字取り出す 番外編:やたら if [ ]; then を使わない ※Markdownで目次の書き方がわからんかった xargsでfunctionを叩く 下の例だと find xxxx | xargs cp xxxx ってかけば良さそうでイマイチだけど、もっと複雑な処理やらせたいときに。 前はこう書いてた #!/bin/bash for x in `find /var/www -name xxx` do cmd="cp -v /hoge/fuga/xxx
情報源: BASH Running in Ubuntu on Windows 現状わかってきたことをまとめてみます。 出来ること出来ないこと。Ubuntu on Windowsの用途。 BASH Running in Ubuntu on Windowsで出来ること。 GUIの無いLinuxアプリケーションの実行。 ELF形式のバイナリファイルを直接実行できる。 ELF形式のバイナリを開発できる。 Aptによるアプリケーション管理。 Windows側ファイルシステムのマウント。 Windows側から見るとLinux(Ubuntu)のファイルシステムは通常のディレクトリ/ファイルに見える。 BASH Running in Ubuntu on Windowsで出来ないこと。(そう考えることが出来るもの) Ubuntu側のシェルからのWindowsアプリケーションの起動、またその逆。 Ubuntu
B! 45 0 0 0 文字列の最後に余計な空白行とかが付いてる時に消す事を sedを使ってやろうと思ったら結構大変だった件。 問題が起こった所 sedでの改行の消し方 sedで末尾の空白行を消す sedで末尾の空白行を消す別の方法 sedで改行を出力する ファイル末尾の改行について 問題が起こった所 シェルスクリプトの中で文字列を扱っている時に、 それを出力するにあたって末尾に空白行とかがある時にそれを無視 したい時がありました。 Issue #4 · rcmdnk/sentaku この辺でごちゃごちゃやってる時のこと。 シェルスクリプトの中で、文字列の行数を数えてその分だけ空きを作る事。 tputとかでカーソル位置を直接動かすので行数を自分で数えておく必要があります。 この際に、適当に作ってた時に文字列の最後に改行を入れることが前提になってて、 文字列によって実際の表示が崩れたりしたの
一撃シェルスクリプトとは これは私が作った造語で、厳密な定義というものを設けているわけではありませんが、「シェルスクリプト(と設定ファイルのひな形)を用意すれば、コマンドを1回実行するだけで環境構築ができてしまうというスグレモノ」を目指しています。現在のところ、線引きとして以下のように詳細なルールを作っています。 OSインストール直後に一撃シェルスクリプトを配置して動かすものとする 実行回数は1回のみで、人が張り付く必要のない設計とする 対話式の入力は可能な限り回避する 一撃シェルスクリプトで重視していないこと 一撃シェルスクリプトは、あくまで「シェルで頑張れる範囲で冪等性(べきとうせい)を確保する」ツールです。なので、上に記した「一撃シェルスクリプトの定義」にだいたい合致していれば「これは一撃シェルスクリプトだぞ」と名乗ってもよいと思っています。例えば、何がなんでも1枚のスクリプトファイ
よく使うコマンドの組み合わせを関数として.bashrcに書いておく事で、色々な操作が簡単になる。筆者の.bashrcとそこに書かれた実用的な関数のサンプル、使用例。 (訳者注) 原文タイトルが「Ten tips for wonderful bash productivity」なので、10のテクニックというタイトルにしていますが、実際には9つしかありません。原文筆者に指摘したところ本人も自覚されていなかった模様?です。悪しからず。 私はいつも自分のbashの環境をいじったり直したりしています。同じような問題に何度も遭遇しては、その度に解決策を探さねばなりません。うんざりして座り込んでしまうまでそれは続きます。お前いつも座って仕事してるだろって? ええ、でももう皆さんお分かりでしょう。そういう場合は、カスタム関数を作って、それを.bashrcに書き込んで、ログインする可能性のあるマシン全部に入
ここ最近、沢山シェルスクリプトを書くようになりました。 元々あまりシェルスクリプトを書いたこと無かったので、色々と勉強しつつ書いてるのですが、 他のプログラミング言語とはちょっと違って独特なクセというか、発見の度におぉー!ってなることが沢山あって楽しいです。 そんなわけで、最近学んだり参考にした中で特に感動したシェルの上手い書き方をまとめてみます。 きっとまだ知らないこととかもっと上手くやる方法なんかが沢山見つかりそうなので、 もっといいやり方あるよ!って方はコメントください 何もしない : (コロン)コマンド シェルを書いていた時に非常に欲しかったコマンドがこれ!何もしない! : というコマンド(?)を利用すると、何もせずに終了ステータス0(つまり正常終了)を返します。 これが様々な事に使える万能コマンドで、これによって面倒なエラー処理を簡潔にできたり、 入力や出力のリダイレクト元/先と
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く