クライアントからteratermでservAに接続します。 そこからservBに接続します。 $ ssh servB サーバーBに個人のディレクトリがあり、そこにシェルスクリプトを作っています。 そのシェルスクリプトは「exit 0」で終わっています。 これを実行すると、サーバーBからログアウトしてしまいます。 exitはシェルスクリプト内で使うと、シェルスクリプトを終了するだけかと思ったのですが、ログアウトもしてしまうものなのでしょうか? exitを書かなければ、ログアウトすることなく、カレントディレクトリは変わらないままです。 実行するたびに $ ssh servB $ cd work/mydir と実行しないと自分のディレクトリに戻ってこれないので不便です。 色々と調べたのですが、なぜログアウトしてしまうのかわかりません。 どうすれば、ログアウトしないのか教えて下さい。 よろしくお願
(注:2017/04/10、いただいたフィードバックを元に翻訳を修正いたしました。) はじめに 私はLinuxが大好きです。コンピュータとのやりとりが楽しくなるし学ぶことも多くなります。OSとハードウェアの基盤となる基本原則を学びたい人にとって、Linuxはとてもいい出発点と言えるでしょう。 ご存じのとおりLinuxとは大抵の場合プログラム(コマンド)を通してやりとりします。Linuxと他のUNIX系システムが持っている特徴は、コマンドラインと、パイプのコンセプトです。プログラムの提供する入力と出力を統合すれば、データを操作するのに非常にパワフルなプラットフォームになります。 Linuxのコマンド、プログラム、バイナリ(何と呼んでもいいのですが)の大部分は、/usr/bin、/usr/sbin/、/binそして/usr/local/binに存在しています。これらのディレクトリを見れば、プロ
シェルスクリプトは、Unix 系環境で仕事をするエンジニアなら誰もが一度は書くであろうにもかかわらず、書き方や特性を熟知している人が少ない言語です。この記事は、シェルスクリプトを書くときに罠を踏まないようにするために最低限あなたが気を付けるべき tips 集です。「たかがシェルスクリプト」とは思わないでください。生半可に書かれたシェルスクリプトはあなたの (チームの) 生産性をかえって低下させます。 Shebang に bash を明示しろ Bash でしか使えない機能のことを俗に Bashism と言います。Bashism はもちろん Bash 以外のシェルでは動きません。これに関するありがちな罠は、以下のように発生します。 Bash が /bin/sh として使われている環境でシェルスクリプトを書く。うっかり Bashism がシェルスクリプトに含まれていても、 /bin/sh は何も
本記事が切っ掛けとなってお声がけを頂き、本記事の増補リファイン版となる記事をSoftwareDesign 2018年1月号のシェルスクリプト特集第2章として執筆しました。リファイン版には、この記事で触れていない文法面での分かりにくさについての解説が含まれています。その文法面での分かりにくさの解説の一部に相当する記事もありますので、ぜひそちらも併せてご覧下さい。 Shell Script Advent Calendarをご覧の皆様、図々しくも5日目に続く2度目のエントリーのPiroです。 前回は自作のBashスクリプト製Twitterクライアントをネタに実装を解説しましたが、今日は他の言語で多少のプログラミング経験はあるんだけど、どうにもシェルスクリプトは苦手だ……という人のための、シェルスクリプトによるプログラミングの勘所を解説してみようと思います。多分、プログラミング入門レベルの人や上級
初級者向けに『自分がシェルスクリプト書くときに気をつけていること』をまとめてみました。 @masudaKの『シェルスクリプトを書く際に気を付けていること8箇条』の乗っかりエントリです。 内容は重複しないように書いてますので合わせて読んでください! 基本的にLinuxの/bin/sh、/bin/bashを想定しています。 テキスト処理は標準入力から受け取って標準出力に出す テキストを扱う小さなツールを作りましょう。 引数はオプション情報を渡すのに使います。 そうすればgrep、sort、uniqなどの便利なコマンドとパイプで連携できます。 grep ERROR /tmp/test.log | my_cmd1.sh 192.168.1.1 | sort 全てを実行する1つのスクリプトを作るのはたいへんだし、応用が効かないです。 人間に伝えたいメッセージは標準エラー出力に出す パイプでつないだ時
先日、シェルスクリプトを記述していたところ、以下のエラーが出てどうしようも無くなってしまった。 Shell script arrays Syntax error: “(” unexpected解決方法を探しにネットを彷徨うと、やれ「改行コード」を直せだの「行頭の宣言」を付けろだの消せだの#を余分に付けてみろだのいろいろな意見があったが、解決できなかった。 今回のテストは以前記述したものをちょっと拡張してみようと思ったものなので、弄りまくっている(というか動いているのが不思議な)Ubuntu 12.04 LTS で試した。 テストも何も、数行のシェルスクリプトで間違っていると言われても、その箇所を見つけるほうが困難なくらいだ。しかも、問題の箇所を探すために極限までスクリプトを削ってもエラーは無くならなかった。 bash を指定して実行すれば?諦めかけた時に出会ったのが「Shell scrip
よーしお前ら、今日はシェルスクリプトを勉強するぞ。シェルの種類はbashだ。ただ、他のシェルでも基本は同じなので安心してくれ。 シェルスクリプトと言っても、findの使い方とかglob展開とかそういう細かいTIPSはやらん。そういうのは他の記事でも読んでくれ。そうじゃなくて、基本的な処理の流れ、考え方の勉強だ。 だいたいシェルスクリプトなんて普段大してやってなくて、いざ必要になったときに「まあPerlやRubyみたいなもんだろ」とか軽く考えてたらしょーもないことでハマって時間を無駄にしたりするもんだ。 なんでそんなことが起きるのか。 それはシェルスクリプトの基本的な発想が分かってないからだ。PerlやRubyのような普通に使われてるプログラム言語とシェルスクリプトの書き方はけっこう違うところがあって、それを理解せずに書いてしまってるからだ。 そもそもシェルとは何かもう一度思い出してみろ。
さっきのvimと同様、自分用のシェルメモ シェルのif文で使う、if [ -e filename ]; thenとかの []はtestコマンド。 条件文に使える奴は以下の通り。 ファイル形式のテスト 式 意味 -b file file が存在し、ブロックスペシャルファイルであれば真。 -c file file が存在し、キャラクタスペシャルファイルであれば真。 -d file file が存在し、ディレクトリであれば真。 -f file file が存在し、通常ファイル (regular file) であれば真。 -h file または -L file file が存在し、シンボリックリンクであれば真。 -p file file が存在し、名前付きパイプ (named pipe) であれば真。 -S file file が存在し、ソケットであれば真。 -t [fd] fd が端末でオープン
メールデータの構造について調べたのでまとめてみます。 メールは全てただのテキストデータ メールデータを理解する上で、最も重要なのは以下の1文です。以下で書かれている「テキスト」とは、ASCIIコード*1のことです。 インターネットメールは、もともとテキストベースのメールシステムであった。つまり、テキストしか送れないシステムである。 MIME(Multipurpose Internet Mail Extensions)〜前編:インターネット・プロトコル詳説(3) - @IT でも写真やExcelファイルも添付できますよね?どういうことでしょうか?それは、以下の通りです。 あらゆるデータをテキスト(正確には、英語圏の人間にとってのテキスト)に変換して送受信しようとするのが、インターネットメールの根本的な考え方である。 MIME(Multipurpose Internet Mail Extens
下記のURLが参考になるかもしれません。 http://www.mew.org/Newsletters/3.html Content-Typeで文字コードを指定することもありますが、これから続く内容に どういったものが含まれているかということをあらわしています。 今のContent-Typeを簡単に読み解くと 内容(Content)の種類(Type)は、複数のパートのものです(multipart/mixed) 区切り(boundary)は"eGu8AIxX"になります。 てなとこ。 Multipartの代表的なものとしては添付ファイル付のものがあります。 またHTMLメールなんかもMultipartで送られてくることがあります。 文字化けの原因としては 携帯でmutipartのメールに対応してなかったとか、 中のパートに対応していない種類ものが含まれていたとか そのメールが正しいフォーマッ
-xを付けると実行内容を表示しながら実行する。[2008-11-29] bash -x スクリプトファイル -nを付けると、実行せずにファイル内の構文解析(エラーの有無のチェック)を行う。[2008-11-29] bash -n スクリプトファイル . スクリプトファイル 現在実行中のシェルと同じシェルを使ってスクリプトを実行する。 スクリプトの中で環境変数を設定した場合、現在のシェルの環境にも影響する (スクリプトの中で定義した環境変数が実行元でも有効になる)。 ファイルに実行権限(chmod +x)が付いている場合は、以下のようにして実行できる(相対パスで指定している)。 ./スクリプトファイル ファイルに実行権限(chmod +x)が付いており、かつ環境変数PATHにカレントディレクトリ「.」が含まれている場合は、以下のようにして実行できる。 スクリプトファイル シェルスクリプトの書
github.com おそらく先行実装は python で書かれたこれです。 curl にはウェブサイトの応答時間を計測する機能が搭載されており、このツールではそれを利用して出力結果をグラフィカルに表示させています。単なる curl のラッパーのようなツールなのですが、見た目がリッチになるのに加えて、単一ファイルで実行でき python のバージョンに影響されないような工夫がされているのが、受けているポイントのような気がします。 このツールを見たとき「Go で書いてみるの良さそう!(この手のツールで単一バイナリになるのは嬉しいですよね)」と思い、休憩時間やお昼休みなどにちまちま書いていたら、二日前に先を越されてしまいました(そりゃそうですよね。なんでもスピードが大事だと痛感)。 github.com また、ついこの間まで 800 Stars くらいだったのですが、ここ1週間で爆発的に伸びて
こんにちは、初心者向け基本コマンドを紹介しているシェルスクリプト入門です。 最後で、ファイル名を一発で変える簡単なシェルスクリプトを書いてみましょう。 環境:Mac OSX El Capitan Terminal; bash / sh shell environment; シェルスクリプトとは シェルスクリプトとは、簡単に言うとUnixコマンドなどを並んで実行するだけです。 いつ何の条件で何の命令を実行するとか、ファイルコンテンツを読み込むとか、ログファイルを書き出すとかをする役割です。 基本設定 test.shファイルを作成します。 シェルスクリプトファイルは基本的に.shの拡張子で作成します。 実際のコードを書く前に最初の一行目は #!/bin/shを書き、システムにこれからシェルスクリプトを書きますようと知らせるものです。(#はhash、!はbangですから、#!をshebangと言
エラーがあったらシェルスクリプトをそこで打ち止めにしてくれる(exit 0以外が返るものがあったら止まるようになる)。「あっあれここでうまくいってないからデータ準備できてないのにあれあれっもうやめて!」ってなるのを防げる。 set -u 未定義の変数を使おうとしたときに打ち止めにしてくれる。Perlでいうuse strict 'vars';的なもの。 って気軽な気持ちで書いてしまって、「ん、やたら時間かかると思ったらスペルミスうわなにをするやめ」ってなるのを防げる。 一部だけ例外にしたい はてなブックマークのコメントより -e は command1 || command2 みたいなことが出来なくなるの使うことないな。-uは付けといて良いが。 確かにおっしゃるとおりですね。コマンドの失敗を考慮して書いている部分については(もしくはやたらexit 0以外するコマンドを呼ばないといけないときなど
終了ステータス 終了ステータスとは? コマンド終了時には「終了ステータス (exit-status)」と呼ばれるコマンドの成否を表す数値が特殊変数 $? に自動で設定される。 各コマンドにより異なるが、一般的には、 コマンド成功時には「0」 失敗時には「1」(コマンドやエラーの種類によっては 0 以外) が設定される。 → 直前に実行したコマンドの成否は、特殊変数 $? に設定されている値で確認する。 終了ステータスを設定 シェルスクリプトでは exit コマンドに指定したパラメータ (0 もしくは 1 ~ 255 の正の整数値のみ可) が、そのシェルの終了ステータスとなる。シェルスクリプトにおいても正常終了時は exit 0 で、異常終了時には exit 1 で終了するようにするのが慣例である。 関数も同様に return コマンドに指定したパラメータが終了ステータスとなる。 → シェル
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く