「bash」の版間の差分

提供: MacWiki
移動: 案内検索
(bash_completion)
(bash_completion)
行95: 行95:
 
プログラマブル補完機能が備わっています。
 
プログラマブル補完機能が備わっています。
 
このような補完の定義を自分で書くのも良いですが、
 
このような補完の定義を自分で書くのも良いですが、
次のサイトで配布されている設定パッケージ(bash_completion)を
+
次のサイトで配布されている設定パッケージ(bash_completion)を使うと便利です。
利用させていただくと便利です。
+
 
2009年から、新しいメンテナーに開発が引き継がれています。
 
2009年から、新しいメンテナーに開発が引き継がれています。
  
行102: 行101:
 
*[http://www.caliban.org/bash/ Working more productively with bash 2.x/3.x](旧サイト)
 
*[http://www.caliban.org/bash/ Working more productively with bash 2.x/3.x](旧サイト)
  
bash_completion ファイルを適切な場所に設置したのち、
+
bash_completion ファイル、および bash_completion.d ディレクトリを適切な場所に設置したのち、
 
.bashrc あるいは .bash_profile に次のように書いて、設定ファイルを読みこみます。
 
.bashrc あるいは .bash_profile に次のように書いて、設定ファイルを読みこみます。
  
 
  [ -n "${BASH_COMPLETION}" ] || \
 
  [ -n "${BASH_COMPLETION}" ] || \
     export BASH_COMPLETION="${HOME}/lib/bash/bash_completion"
+
     export BASH_COMPLETION="${HOME}/docoka/bash_completion"
 
  [ -n "${BASH_COMPLETION_DIR}" ] || \
 
  [ -n "${BASH_COMPLETION_DIR}" ] || \
     export BASH_COMPLETION_DIR="${HOME}/lib/bash/bash_completion.d"
+
     export BASH_COMPLETION_DIR="${HOME}/docoka/bash_completion.d"
 
  . ~/docoka/bash_completion
 
  . ~/docoka/bash_completion
  

2009年11月24日 (火) 01:39時点における版

Mac OS X の標準シェル

bash とは?

Bourne Shell の系譜を引く高機能シェルです。 GNU の配布物であるため、多くの Linux ディストリビューションで 標準シェルとして使われています。詳しくは Wikipedia:Bash などを参照してください。 また、そもそもシェルとは何かということについては、 UNIX入門のシェルについての項を参照してください。

Mac OS X でも Version 10.3 (Panther) から bash が標準シェルに採用されています。

入門記事

文法

変数

変数は、宣言なしに使うことができます。参照するときは $ をつけます。

a=1
echo $a
==> "1"

引数

以下の特殊変数を使うと、スクリプトの引数にアクセスできます。

$* 引数全部
$0 実行スクリプト名
$1 1つめの引数
$# 引数の数

条件文

条件文は、if で始まって fi で閉じます。[ ... ] で囲っている部分が条件式です。

if [ (条件) ]; then
        ...
fi

例)

if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

さらに条件分岐する場合は、elif (elsif ではないことに注意) や else を使います。

if [ (条件) ]; then
        ...
elif [ (条件) ]; then
        ...
else
        ...
fi


ループ

(未稿)

カスタマイズ変数

(質問)tcsh の unset autologout に相当する変数ってありましたっけ? - ぜ

bash_completion

bashには、シェルの補完の動作をプログラムを書いて自由に拡張できる、 プログラマブル補完機能が備わっています。 このような補完の定義を自分で書くのも良いですが、 次のサイトで配布されている設定パッケージ(bash_completion)を使うと便利です。 2009年から、新しいメンテナーに開発が引き継がれています。

bash_completion ファイル、および bash_completion.d ディレクトリを適切な場所に設置したのち、 .bashrc あるいは .bash_profile に次のように書いて、設定ファイルを読みこみます。

[ -n "${BASH_COMPLETION}" ] || \
    export BASH_COMPLETION="${HOME}/docoka/bash_completion"
[ -n "${BASH_COMPLETION_DIR}" ] || \
    export BASH_COMPLETION_DIR="${HOME}/docoka/bash_completion.d"
. ~/docoka/bash_completion

bash_completionをシステムにインストール(/etc/bash_completion)した場合は、 1〜4行目の BASH_COMPLETION、BASH_COMPLETION_DIR の設定は不要です。

  • プログラマブル補完機能で open コマンド(open -a <application_name> <filename>)の <application_name> 部分も補完できたらいいですね。
    • ↓吉武氏に補完ファイルを頂きました。中身を整理して本家にフィードバックできれば良いのですが... --
_mac_applications() {
  local IFS=$'\t\n'
  COMPREPLY=( \
    $( compgen -W \
      '$( mdfind -onlyin /Applications -onlyin /Developer'\
'           -onlyin $HOME/Applications -onlyin $HOME/Desktop'\
'           "kMDItemContentType == '"'com.apple.application-*'"\
'"        | perl -p -e "s|^.*/||; s|\\.app||; s| |\\\\ |g;" )' -- $cur ) )
}

# dfind -onlyin /Applications "kMDItemContentType==com.apple.application-*" | sed -e 's/.*\///; s/ /\\\\ /'

_open() {
  local cur prev prefix temp

  COMPREPLY=()
  cur=${COMP_WORDS[COMP_CWORD]}
  prev=${COMP_WORDS[COMP_CWORD-1]}

  if [ $COMP_CWORD -eq 2 ] && [[ "$prev" == -a ]]; then
    _mac_applications
    return 0
  elif [[ "$cur" != -* ]]; then
    _filedir
    return 0
  fi

  # complete using basic options
  COMPREPLY=( $( compgen -W '-a -b -e -f -t -foo" "bar' -- $cur ) )

  return 0
}

complete -F _open open

関数を定義する

自作のエイリアスコマンドで引数を使いたいときは、 alias ...=... の代わりに function を定義します。 引数は、それぞれ $@, $1, $2 のように記述します。

function cd () { command cd $@ && pwd && ls -aF ; }

関連書籍

  • ニューハム,キャメロン (著)『入門bash 第3版』(オライリー・ジャパン, 2005/10/26, 2940円)