「Terminal.app」の版間の差分

提供: MacWiki
移動: 案内検索
(カレントディレクトリをFinderで開く: currDir(pwd コマンドの実行で表示される文字列、パス)に空白文字等が含まれていても大丈夫なように修正)
 
(同じ利用者による、間の1版が非表示)
行7: 行7:
 
== 操作 ==
 
== 操作 ==
 
*スクロールバッファのキーボードショートカット
 
*スクロールバッファのキーボードショートカット
**ページアップ(ダウン):⇞(⇟)  ,  ノートはfn+↑(↓)
+
**ページアップ(ダウン):⇞(⇟)  ,  MacBook等はfn+↑(↓)
 
**上端(下端)までスクロール: ↖(↘)  ,  home(end)、ノートはfn+←(→)
 
**上端(下端)までスクロール: ↖(↘)  ,  home(end)、ノートはfn+←(→)
 
**1行上(下)へ:⌘↑(↓)
 
**1行上(下)へ:⌘↑(↓)
行113: 行113:
 
-->
 
-->
  
AppleScript利用かつシェルスクリプト化(osascriptコマンド利用)では、
+
AppleScript利用かつシェルスクリプト化([[コマンド/osascript|osascript]]コマンド利用)では、
 
<pre>
 
<pre>
 
#!/bin/sh
 
#!/bin/sh
行142: 行142:
 
Terminal上で直前のコマンドを再度動かすには
 
Terminal上で直前のコマンドを再度動かすには
 
  $ !!  
 
  $ !!  
ですが、これに相当することをAppleScript利用かつシェルスクリプト化(osascriptコマンド利用)し、Terminal上の現在の表示内容を「コマンドプロンプトだけの行」で区切ったときの最後の部分を出力させると、
+
ですが、これに相当することをAppleScript利用かつシェルスクリプト化([[コマンド/osascript|osascript]]コマンド利用)し、Terminal上の現在の表示内容を「コマンドプロンプトだけの行」で区切ったときの最後の部分を出力させると、
 
<pre>
 
<pre>
 
#!/bin/sh
 
#!/bin/sh
 
PROMPT="$ "
 
PROMPT="$ "
THISCOMMAND="${PROMPT}「コマンド名」" # このコマンド名を指定
+
THISCOMMAND="${PROMPT}"`basename $0`
 
STR=$(
 
STR=$(
 
echo "
 
echo "
行182: 行182:
  
  
* 下記のシェルスクリプト(osascriptコマンド利用)を sourceコマンドで動かし、cd コマンドを現在のシェル(のプロセス)に反映させる。<!--~/.bash_profile内でコマンドエイリアス設定するならば,
+
* 下記のシェルスクリプト([[コマンド/osascript|osascript]]コマンド利用)を sourceコマンドで動かし、cd コマンドを現在のシェル(のプロセス)に反映させる。<!--~/.bash_profile内でコマンドエイリアス設定するならば,
 
  alias コマンドエイリアス名='source このシェルスクリプトパス'-->
 
  alias コマンドエイリアス名='source このシェルスクリプトパス'-->
  

2014年2月5日 (水) 00:05時点における最新版

ターミナル(Terminal)とは?[編集]

Terminal.app(ターミナル.app)は、Mac OS X にバンドルされている、ターミナルエミュレータと呼ばれる種類のアプリケーションプログラムです。 Mac OS X で UNIX 的機能を使用したいときには、このターミナルを利用します。 /Applications/Utilities (アプリケーション/ユーティリティ)フォルダの中にインストールされています。

操作[編集]

  • スクロールバッファのキーボードショートカット
    • ページアップ(ダウン):⇞(⇟) , MacBook等はfn+↑(↓)
    • 上端(下端)までスクロール: ↖(↘) , home(end)、ノートはfn+←(→)
    • 1行上(下)へ:⌘↑(↓)
    • スクロールバッファを消去:⌘K
  • ウィンドウの切り替え
    • ⌘数字で、ウィンドウが切り替えられます。ターミナルインスペクタの「ウィンドウ」で「コマンドキー」にチェックを入れるとウィンドウのタイトル部分に数字が表示されます。
    • ⌘←(→) で、ウィンドウを順番に行き来することができます。

トラブルシューティング[編集]

デフォルトのログインシェルを変更したい場合[編集]

Mac OS X 10.4 の NetInfo マネージャでデフォルトのログインシェルを変更 (/usr/local/bin/tcsh にインストールした tcsh-6.14) したところ、 「このアプリケーションの実行が認証されていません。管理者が不正なシェル値を設定しています。」 という警告が表示され、ターミナルが起動できなくなりました。

これはターミナルが /etc/shells に書かれた設定を読み込み、そこに書かれたシェルのみを起動するようになったためです。

このようなエラーが出た場合、デフォルトのログインシェルを /bin/bash なり /bin/tcsh に戻した上で、ターミナルを起動し,pico /etc/shells として

/usr/local/bin/tcsh

の一行を追加し、再びデフォルトのログインシェルを /usr/local/bin/tcsh にすることで、ログインシェルを変更した状態でターミナルを起動できるようになります。 一般に、10.4 において、ログインシェルを自分でビルドした hoge (/usr/local/bin にインストールしてあるものとする) に変更する場合、/etc/shells に

/usr/local/bin/hoge

と書いておく必要があります。

特定の文字を扱う際に画面が乱れる[編集]

Mac OS X 10.4 までの Terminal.app では、文字エンコードを UTF-8 に設定している場合、特定の記号類を用いた際に画面の表示が乱れることがあるようです。

この問題が気になる場合には、Mac OS X 10.5 にアップグレードするか、uxterm や rxvt-unicode (urxvt) など、より厳密な動作の期待できる他のターミナルソフトの利用をお奨めします。 uxterm は Apple の X11 に標準で付いています。また、rxvt-unicode は MacPorts や Fink で導入できます。

新規ウィンドウを開く際の自動実行コマンド[編集]

~/Library/Preferences/com.apple.Terminal.plist の内部の "ExecutionString" 欄に設定されたコマンドは,Terminalの新規ウィンドウを開く際に自動実行されます.

AppleScript[編集]

カレントディレクトリをFinderで開く[編集]

Terminal上では

$ open .

とすれば良いですが、AppleScriptからは、

tell application "Terminal"
    activate
    if (count (every window whose visible is true)) = 0 then return
    -- front windowにアクセスする前に上記のチェックが必要
    do script "open ." in front window
end tell

もしくは、

tell application "Terminal"
	activate
	if (count (every window whose visible is true)) = 0 then return
	do script "pwd" in front window -- pwd コマンドを実行
	-- delay 2 -- 環境によっては pwd コマンドの実行結果の表示を待つ
	set theContents to contents in front window
	set strList to paragraphs of theContents
	set idxMax to length of strList
	repeat with idx from idxMax to 1 by -1
		if (item idx of strList) is not "" then
			set idxPwd to idx - 1
			exit repeat
		end if
	end repeat
	set currDir to item idxPwd of strList -- 表示内容の最終行の文字列(pwd コマンドの実行で表示される文字列)
	set currDir to currDir as Unicode text
	do script ("open " & quoted form of currDir) in front window
end tell

参考:

前面のウィンドウの表示内容から、最終行の1つ上の行だけを文字列としてクリップボードにコピーする[編集]

Terminal上では、直前のコマンド (!!) を再度動かし、

$ !! | tail -n 1 | tr -d '\n' | pbcopy

とすれば良いですが、

AppleScript利用かつシェルスクリプト化(osascriptコマンド利用)では、

#!/bin/sh
OFFSETLASTLINE=1 # 表示内容の最終行の1つ上の行の文字列
if [ $# -ge 1 ]; then
  OFFSETLASTLINE=$1
fi
echo "
tell application \"Terminal\"
    if (count (every window whose visible is true)) = 0 then return
    set theContents to contents of front window
end tell
set strList to paragraphs of theContents
set idxMax to length of strList
repeat with idx from idxMax to 1 by -1
    if (item idx of strList) is not \"\" then
        set idxLast to idx - 1
        exit repeat
    end if
end repeat
set strSecondLast to item (idxLast - ${OFFSETLASTLINE}) of strList
set the clipboard to strSecondLast
" |osascript - 


前面のウィンドウの現在の表示内容の最後辺りを再度表示出力する[編集]

Terminal上で直前のコマンドを再度動かすには

$ !! 

ですが、これに相当することをAppleScript利用かつシェルスクリプト化(osascriptコマンド利用)し、Terminal上の現在の表示内容を「コマンドプロンプトだけの行」で区切ったときの最後の部分を出力させると、

#!/bin/sh
PROMPT="$ "
THISCOMMAND="${PROMPT}"`basename $0`
STR=$(
echo "
tell application \"Terminal\"
    set theHistory to history of front window
end tell
set myDelim to \"${PROMPT}\" & (ASCII character 10)
set curDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to myDelim
set theList to text items of theHistory
set AppleScript's text item delimiters to curDelim
set myItem to \"\"
repeat with i from (length of theList) to 1 by -1
    set myItem to item i of theList
    if myItem is not \"\" and (myItem does not begin with \"${THISCOMMAND}\") then
        exit repeat
    end if
end repeat
get myItem
" |osascript - 
)
echo "${STR}"

Finderのフォルダーをターミナルで開く[編集]

Finder上で選択したフォルダー(のディレクトリ)をターミナルで開く,もしくはディレクトリ移動等するための各種方法.


  • 下記のシェルスクリプト(osascriptコマンド利用)を sourceコマンドで動かし、cd コマンドを現在のシェル(のプロセス)に反映させる。
#!/bin/sh
DIR=$(
echo "
tell application \"Finder\"
       set theItem to selection
       if number of theItem is 0 then
               set theItem to (target of window 1)
       else
               set theItem to item 1 of theItem
       end if
       if (class of theItem) is not folder then
               set theItem to container of theItem
       end if
end tell
get POSIX path of (theItem as string)
 " |osascript - 
)
cd "${DIR}"
pwd

ファイルのディレクトリをターミナルで開く[編集]

  • DTerm: 一行型専用ターミナルが開かれる(キーボードショートカットで).Finder最上面表示のディレクトリ,もしくはwindow title bar機能付きアプリケーションで開いているファイルが対象. http://www.decimus.net/dterm.php


Wiki内の関連ページ[編集]