シェルスクリプトで標準入力から取り込んだテキストをfor ... in ... で回したい時などに、受け取ったテキストの先頭や末尾、あるいはデリミターに含まれている余計な空白を除去したい場合がありますが、今までは色々と苦労してsedやらawkやらtrを駆使して面倒な事をやっていたのですが、実はxargs一発で出来るという目から鱗w
![シェルスクリプトでトリムする - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/e82632f47724208a42e9e4bef1311b9dcdee5bec/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9JUUzJTgyJUI3JUUzJTgyJUE3JUUzJTgzJUFCJUUzJTgyJUI5JUUzJTgyJUFGJUUzJTgzJUFBJUUzJTgzJTk3JUUzJTgzJTg4JUUzJTgxJUE3JUUzJTgzJTg4JUUzJTgzJUFBJUUzJTgzJUEwJUUzJTgxJTk5JUUzJTgyJThCJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz00YTdmNzRhNDY2OWE0Y2I4NGY3ZDQ2M2M4MWY2MDY0NQ%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwa2F6dWhpZGV0JnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1mMDkwZjAyMzEyMmIzMzlmZDkyODA2MWQ4MDdlYzNiZQ%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3Dc6124d5fd50778ea96317e32363d0752)
κeenです。LLで書かれた動作のもっさりしてるコマンドラインツールよりシェルスクリプトが好きです。 しかしシェルスクリプトを書く時にはハマり所も多いです。ということでハマりそうなところと対処法を共有しますね。 1. 変数は基本クォート 変数には空白が入り得ます(特にパス名とか)。あるいは空である可能性もあります。
現在の shell(以下、current shell) を確認する方法として真っ先に思い浮かぶのは以下だと思います。 $ echo $SHELL /bin/bash ただ、これは不正解で、$SHELL はあくまでも login shell ですので、 login shell と current shell が違う場合は正しい値を返してくれません。 私の場合ですと、ローカル環境で常時利用しているのは zsh ですが、 login shell は bash です(zsh を login shell にすると重いと教えていただいたことがあるので)。 このようなケースでも正しい値を返す方法が以下です。 $ echo $0 -zsh shell 上では $0 に current shell が格納されています。 これで解決すれば良いのですが、shellscript 内で確認しようと思うと話しは変わっ
-xを付けると実行内容を表示しながら実行する。[2008-11-29] bash -x スクリプトファイル -nを付けると、実行せずにファイル内の構文解析(エラーの有無のチェック)を行う。[2008-11-29] bash -n スクリプトファイル . スクリプトファイル 現在実行中のシェルと同じシェルを使ってスクリプトを実行する。 スクリプトの中で環境変数を設定した場合、現在のシェルの環境にも影響する (スクリプトの中で定義した環境変数が実行元でも有効になる)。 ファイルに実行権限(chmod +x)が付いている場合は、以下のようにして実行できる(相対パスで指定している)。 ./スクリプトファイル ファイルに実行権限(chmod +x)が付いており、かつ環境変数PATHにカレントディレクトリ「.」が含まれている場合は、以下のようにして実行できる。 スクリプトファイル シェルスクリプトの書
はじめに どうも。自称インフラエンジニヤ*1のかっぱです。わたくしが MySQL のテーブルメンテナンスのシェルスクリプトを書いた際に役立ったことを幾つか書いてみることにします。 参考文献 C言語において、NULL と 0 と '\0' の違いは何ですか? C言語の基礎(5-3 main関数に引数を渡す) Coreutils - GNU core utilities GNU Where can I find source code for Linux core commands? シェルスクリプトで空文字列かどうか調べる。 3.5. バッチモードでの mysql の使用 MySQLをコマンドラインから直接実行&出力形式の変更方法 mysql --execute オプションでクエリを標準出力した際の出力結果を調整する インフラエンジニヤは mysql のコンソールにログインしてしまったら負け
→ -d 'N days ago' オプションで N 日前の日付を取得できる。 Linux では拡張された GNU date コマンドが使用できるので、簡単に過去の日付を取得できる。 $ date 2007年 6月 2日 土曜日 23:05:20 JST #↑そのまま実行すると当日の日時が表示される。 $ date -d '1 days ago' 2007年 6月 1日 金曜日 23:05:31 JST #↑1日前を指定すると、現在日時から24時間前の日時が表示される。 「GNU date」が使用できない場合 → 一時的に環境変数 TZ を変更した上で date コマンドを実行する。 古い UNIX マシンなどでは、「GNU date」が使用できない場合が多い。そういった環境では、一時的にタイムゾーンを変更して date コマンドを実行することで、過去の日付を取得することができる。 $ e
【標準入力】 read ---------------------------------------------------------------------- #!/bin/sh read timeofday echo $timeofday exit 0 ---------------------------------------------------------------------- 【条件】 test([ ])コマンド ---------------------------------------------------------------------- ファイル hoge の存在を確認する ex1) if test -f hoge then ... fi ex2) if [ -f hoge ] then ... fi ex3) if [ -f hoge ]; the
●背景 P言語つかうようになって ~/bin の下に沢山スクリプトファイルを作ってしまってウザくなってきた。 そこで、小さなスクリプトプログラムは、シェルのヒアドキュメントの上に書いてしまうことにした。 これをスマートに行なうには、ヒアドキュメントをシェル変数に格納することが必要になる。 ● シェル変数にヒアドキュメントを代入する $ bar=`cat <<'EOF' > This is a pen. > That is a desk. > EOF > ` # そのままエコーすると改行が失なわれる $ echo $cat This is a pen.That is a desk. # ダブルクォートすると改行も再現される $ echo "$cat" This is a pen. That is a desk. ● ヒアドキュメント中に書いたスクリプトを実行する #!/usr/bin/env
ロングオプション(--tmpdir /tmp みたいなやつ)が欲しいと思ったことはなかったのですが、この日書いていたスクリプトに、意味をよく理解して注意して指定して欲しいオプションを実装しようとしていて、そういう局面ではロングオプションを使うのがいいのでは?と思い至りました。 そこで、まずは練習として、前に書いたテンプレート(getoptを使う版)を拡張して、ロングオプションに対応してみました。 #!/bin/bash # # getopt-long-template.bash (use getopt utility) # export LANG=C usage_exit() { echo "Usage: getopt-long-template.bash [-a] [-d dir] [--extra] [--file f] item1 item2 ..." 1>&2 exit 1 } #
引数を処理する 引数とは? 引数 (ひきすう) とはコマンド (シェルスクリプト) 実行時に、コマンドラインから渡される値のことである。 引数は実行時にプログラム内で参照され、シェルスクリプトの実行結果 (動作) に影響を与える。引数はパラメータと呼ばれることもある。 → コマンド名に続けて引数としてコマンドに渡したい値のリストを指定する。 引数はコマンド名に続けてスペース区切りで指定する。引数として指定可能な値の数は各コマンドにより異なる。 【参考】 引数とオプション コマンド実行時に指定する値には引数とオプションがある。引数は実行に使用されるファイル名や出力されるメッセージなどを指定するのに使用される。 一方、オプションは -f などのように - (ハイフン) とアルファベット1文字で表記され、主にコマンドの振る舞い方を指定する目的で使用されるものである。 また、オプションは -a -
Raycastを使い始めて1年経ったので、どういうことに使っているかを振り返ってみる。去年書いた AlfredからRaycastに移行した - oinume journal の記事から少し使い方が変わっているところもあるのでメモがてら。 基本的な使い方 Cmd + QをRaycast起動のショートカットとして割り当てている。Pro版は使っていないのでAI機能などは使ったことがない。 ブラウザのブックマーク検索など、よく使うけどHotKeyを割り当てるほどでもないRaycastコマンドはbmのようにAliasを設定している。 Cmd + QでRaycastを起動してbmと入力するとブックマークの検索ができるので楽ちん アプリケーションランチャー機能 アプリケーションを起動するときのランチャーとして使っている。よく使うアプリにはHot Key(ショートカット)を割り当ててる。 Clipboar
入力と出力 リダイレクションとパイプ コマンドの実行結果は通常、標準出力であるディスプレイに出力される。この実行結果はリダイレクション(>、>>)やパイプ(|)を使用することにより、ディスプレイではなくテキストファイルやコマンドに対して出力するように切り替えることができる。 また、リダイレクションはコマンドの出力先をテキストファイルに切り替える以外にも、これとは逆にコマンドへの入力元をテキストファイルに切り替えることもできる。 なお、リダイレクションとパイプは次のように使い分ける。 リダイレクション データを渡す対象がファイルである場合はリダイレクションを使用する。 パイプ データを渡す対象がコマンドである場合はパイプを使用する。 リダイレクション [>, », <] コマンドの出力を file へ上書きする → コマンドの実行結果の出力先を、ディスプレイからファイルへ切り替えたい場合は、
Landscape トップページ | < 前の日 2006-02-24 2006-02-27 次の日 2006-02-28 > Landscape - エンジニアのメモ 2006-02-27 シェルのパラメータ展開でスクリプト自身のファイル名を取得する 当サイト内を Google 検索できます * シェルのパラメータ展開でスクリプト自身のファイル名を取得するこの記事の直リンクURL: Permlink | この記事が属するカテゴリ: [bash] [シェルスクリプト] 2006-02-22 に書いた「シェルスクリプト自身のファイル名を取得できる特殊変数 $0」についてメールで指摘を頂いた。ありがとうございます。 私はスラッシュなどのパス指定文字列を除去するために basename コマンドを使っていたのだが、そうしなくても済む方法があるとのこと。 http://sonic64.com/20
昔の記事ですが、IBM DeveloperWorksで紹介されていたUnixコマンドをご紹介。たまに忘れるので備忘録用にまとめておきます。 参考リンク UNIX tips: Learn 10 good UNIX usage habits 1コマンドでディレクトリツリー生成 -pオプションを利用 $ mkdir -p tmp/a/b/c 中括弧を使えば複雑なツリーも1コマンドで $ mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a} もし、-pオプションが使えないのならmkdirhierコマンドを $ mkdirhier project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a} 展開するディレクトリの指定 $ tar xvf newarc.tar.gz
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く