Paepoi

Paepoi » ShellScript Tips » ShellScript Tips | gnome-terminal と Terminal.app

ShellScript Tips | gnome-terminal と Terminal.app

# 最終更新日 2019.12.01

UNIX 系 OSでは POSIX 準拠のコマンドはすべて同様に扱えます。
しかし端末の操作性やサービス等の拡張部分では OS によって異なります。

キーボードショートカットの違い
共通項目
  • [Tab] キー
    長いファイル名やディレクトリを指定する場合や特定コマンドでは
    先頭の数文字をタイプして [Tab] キーを叩くと保管してくれます。
  • 上下矢印キー
    上矢印キーで前回打ち込んだコマンドの履歴が辿れる、下なら逆。

    違い一覧
    操作Terminal.appgnome-terminal
    新規ウインドウcommand+NCtrl+Shift+N
    新規タブcommand+TCtrl+Shift+T
    タブを閉じるcommand+Wbash 自体を Ctrl+D で終了させる
    終了command+Qbash 自体をすべて Ctrl+D で終了させる
    切り取り
    コピー
    貼り付け
    command+X
    command+C
    command+V
    Ctrl+Shift+X
    Ctrl+Shift+C
    Ctrl+Shift+V
    セッションの終了control+DCtrl+D
    強制終了control+CCtrl+C
    Terminal.app で bash 自体を control+D で終了させると無反応になるので注意。

    コマンドの違い
    大文字小文字
    # macOS はパス名やファイル名の大文字小文字を区別しない
    # なので /bin 以下にある POSIX コマンドなら大文字でも使える
    ECHO Hello
    #=> Hello
    
    # 冗談みたいだけど macOS では以下も普通に可能
    # もちろん実名は Documents です
    cd documents && pwd
    #=> /Users/sasakima-nao/documents
    
    # ただし macOS では Windows と違い大文字小文字でリネームは可能
    mv IMG_0001.MOV img_0001.mov
    
    # Fedora というか Linux は明確に区別する
    ECHO Hello
    #=> bash: ECHO: コマンドが見つかりませんでした...
    macOS では sudo で GUI は使えない
    # macOS は vi や nano 等のスクリーンエディタのみ
    # GNOME も 3.22 以降は GUI が使えなくなったので現在は共通です
    sudo vi httpd.conf
    ファイルのデフォルトアプリ起動
    # macOS
    open エロ画像.jpg
    
    # GNOME は gvfs-open でしたが 3.24 から gio コマンドに変わりました
    gio open グロ画像.png
    
    # gio コマンドは gvfs URI ならどんなものでも開けます
    gio open trash:///
    GUI アプリの起動
    # macOS フルパス必須なので多用する人は ~/.bashrc にエイリアス推奨
    open -n /Applications/Atom.app
    
    # Linux は CUI と GUI に違いは無い
    gedit
    指定 GUI アプリでファイルを開く
    # macOS この場合はフルパスや app 拡張子はいらない
    open -a Atom kawasaki.txt
    
    # GNOME はやはり CUI と GUI に違いは無い
    atom kawasaki.txt
    サービスの起動(例として Apache)
    # macOS
    sudo apachectl start
    
    # GNOME
    sudo systemctl start httpd.service
    次回起動時よりサービスの自動開始(例として Apache)
    # macOS
    sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
    
    # GNOME
    sudo systemctl enable httpd.service
    音声読み上げ
    # macOS
    say "Homra chan"
    
    # GNOME
    espeak "Homra chan"

    スクリプトファイルの違い
    UNIX 系 OS では端末エミュレータでの動作はまったく同じです。
    実行パーミッションを付加すればシバンで実行される。
    ちなみに拡張子はまったく無意味、単なる目印です。
    macOS では実行パーミッションを付けて拡張子無しにするとアイコンが変わる。
    cat test.sh
    #!/bin/sh
    echo 端末から実行
    
    mv test.sh tes
    chmod +x tes
    ./tes
    端末から実行
    ファイルマネージャーからの実行はかなり違います。
    Nautilus では Enter で実行するかどうかを Nautilus の設定で決めます。
    Finder では command+O で実行するには拡張子を取り払う必要あり。
    #!/bin/sh
    ls
    上記を Nautilus で実行すると実行はされますが何もおこりません。
    標準出力先が /dev/null になり捨てられるので必要ならリダイレクトでまかなう。
    カレントディレクトリはスクリプトファイルがある位置に設定される。
    #!/bin/sh
    ls > output.txt
    Finder で実行すると Terminal.app が立ち上がり ls の結果を出力する。
    ただしどのディレクトリで実行してもカレントディレクトリがルート "/" に設定される。
    なので実行前に移動する必要あり、$0 にフルパスが指定されるので以下のように。
    #!/bin/sh
    cd `dirname $0`
    ls

    bash のカスタマイズ
    プロンプトの変更
    # $PS1 シェル変数を変更することでカスタマイズできる
    # デフォルトの確認
    echo $PS1
    #=>'[\u@\h \W]\$ '
    
    # 改行になった場合に出る > もシェル変数
    echo $PS2
    #=>'> '
    
    # 変更するには PS1 シェル変数に代入
    # インスタンスが終了するまでは適用されたままになる
    # 恒久に適用させたい場合は ~/.bashrc に書き込み
    PS1='スズキカタナ \W \$ '
    指定結果
    文字列一部の記号を除き普通に
    ${**}環境変数を入れることもできる
    \a音が鳴る
    \d日付
    \D{format}strftime の書式で日時(e,g, '\D{%r} ')
    \eエスケイプ
    \hホスト名 localhost.localdomain ならドットより前
    \Hホスト名 localhost.localdomain なら全部
    \jカレントのジョブ番号
    \l/dev/pts/* の何番か
    \n改行(必要なの?)
    \rキャッジリターン(必要なの?)
    \sシェルの名前
    \t'\D{%H:%M:%S} ' と同じ
    \T'\D{%I:%M:%S} ' と同じ
    \@'\D{%I:%M %p} ' と同じ
    \A'\D{%H:%M} ' と同じ
    \uユーザー名
    \vbash のバージョン *.*
    \Vbash のバージョン *.*.*
    \w現在位置、パンくずリスト有り(~/himitu/ero/douga)
    \W現在位置、パンくずリスト無し(douga)
    \!~/.bash_history に保存される行番号
    \#実行したコマンドの数で繰り上げ
    \$UID がゼロ(root)なら # を $ に変更
    \nnn8 進数で記号を指定できる('\041 ' で'!')
    \\バックスラッシュをどうしても使いたい場合に
    \[表示されない文字列開始
    \]表示されない文字列終了

    表示色の変更
    # '\033[' と 'm' で指定数値を囲めば文字色を変更できる
    # echo -e か printf でエスケープを有効にする必要有り
    
    # 強調表示するには '1;' の接頭子を付ける
    # 背景は +10 するだけで適用される
    
    # 0  デフォルトに戻る
    # 30 Black
    # 31 Red
    # 32 Green
    # 33 Brown
    # 34 Blue
    # 35 Purple
    # 36 Cyan
    # 37 Light Gray
    
    printf "\033[36m__文字を水色に__\n"
    printf "\033[45m__背景を紫色に__\n"
    printf "\033[1;35m__文字を強調紫に__\n"
    printf "\033[0m__デフォルトに戻す__\n"
    
    # PS1 シェル変数にも入れられます
    # 表示されない文字列指定を入れないとおかしくなる場合がある
    # PS1="\[\033[32m\]__プロンプト文字列のみ色を変更__$\[\033[0m\] "

  • Copyright(C) sasakima-nao All rights reserved 2002 --- 2020.