Terminalでの"¥"の取り扱いについて

10.0xの頃は問題なかったように思うんですが、
10.1になってから、"¥"がうまく扱えません。
Terminal上でキーボードから、"¥"を入力すると、バックスラッシュ("\")にかわります。
一方、テキストエディター等Mac上では"¥"を入力すると、ちゃんと"¥"となります。
そして、テキストエディター上の"¥"をクリップボードにコピーし、
Terminal上に貼付けるとそのまま"¥"が貼付けられ、これがUnix上ではバックスラッシュ("\")と認識されない為問題が起こります。
おかげで、Unixでの設定ファイルを編集する場合、いちいち"¥"を消し、"¥"キーを押してバックスラッシュ("\")に変更しなければいけないのですが、何か良い解決策でもありませんでしょうか。

投稿日 2001/11/04 12:22

返信: 16

2001/11/04 15:48 Community User への返信

>Terminal上でキーボードから、"¥"を入力すると、バックスラッシュ("\")にかわります。
>一方、テキストエディター等Mac上では"¥"を入力すると、ちゃんと"¥"となります。
そういうものです。指定しているフォントによって変わります。
>そして、テキストエディター上の"¥"をクリップボードにコピーし、Terminal上に貼付けるとそのまま"¥"が貼付けられ、これがUnix上ではバックスラッシュ("\")と認識されない為問題が起こります。
こちらはよく解りません。当方では再現出来なかったので。
Terminalのプロンプト上に貼付けたのでしょうか? それともviやpicoやemacsなどのエディタ上に貼付けたのでしょうか?
>おかげで、Unixでの設定ファイルを編集する場合、いちいち"¥"を消し、"¥"キーを押してバックスラッシュ("\")に変更しなければいけないのですが、何か良い解決策でもありませんでしょうか。
当方、別におかしな事にはなりませんけど。mi(ミミカキエディット)とviで確認しました。
もしかしてTextEditを使ってませんか? であれば、保存の際に文字コードを“日本語(MacOS)”か“日本語(ShiftJIS)”にしてみて下さい。

2001/11/04 20:05 Community User への返信

返事ありがとうございます。
>Terminalのプロンプト上に貼付けたのでしょうか? それともviやpicoやemacsなどのエディタ上に貼付けたのでしょうか?
TextEdit上でコンパイル用のコマンドを
./configure aaa ¥
bbb ¥
ccc ¥
ddd
と書いて、それをcommand-Cでクリップボードにコピーし
Terminal上にそれを貼付けましたところ、
[localhost:‾] kisaka% ./configure aaa
./configure: Command not found.
bbb ¥
ccc ¥
ddd
[localhost:‾] kisaka% bbb
bbb: Command not found.
[localhost:‾] kisaka% ccc
OK? cc ? no
ccc: Command not found.
[localhost:‾] kisaka% dd
となってしまうのです。
mi(ミミカキエディット)でも同様です。
vi等を使う以前の問題なのです。
どこか設定がおかしいのでしょうか?

2001/11/04 21:12 Community User への返信

確認出来ました。
円記号の部分のコードがTerminalのエンコーディング設定により変わりますね。
エンコーディングを全部試してみましたが、バックスペースで貼付けてくれるのは無かったです。
コンパイル用のコマンドならファイルにして、そのファイルを実行してしまえばいいのでは無いでしょうか?
保存時の文字コードに気を付ければ、ファイルレベルでは問題ないですし。

2001/11/04 21:25 Community User への返信

>円記号の部分のコードがTerminalのエンコーディング設定により変わりますね。
>エンコーディングを全部試してみましたが、バックスペースで貼付けてくれるのは無かったです。
10.0xの時はうまくいってたと思うんですが・・・
>コンパイル用のコマンドならファイルにして、そのファイルを実行してしまえばいいのでは無いでしょうか?
そうですね、ファイル実行しか手はないのでしょうね。
ただ、UNIXサーバーにログインして設定ファイルをなおす場合、
Aサーバーの設定部分を、コピーしてBサーバーの所定部分に貼付けるなんてことをやってるもんですから。。。
もう少し苦労してみます。
ありがとうございました。

2001/11/04 22:36 Community User への返信

Cocoaなアプリケーションでは¥と半角の\は区別されます。
入力するためにはcommand+スペースで入力スクリプトをU.Sに切り替え、
optionキーを押しながら円マークを押します。
この文字はOsakaなどの日本語フォントを利用したCarbonの
アプリでは半角カナの「ヌ」になります。
これを使って置換・検索で¥から\に置換して
該当の部分をドロップすればよろしいのでは?

2001/11/05 07:20 Community User への返信

>入力するためにはcommand+スペースで入力スクリプトをU.Sに切り替え、optionキーを押しながら円マークを押します。
この方法は知りませんでした。
miでは「ヌ」となりTerminalでは「?」となりましたが、TextEditではうまくいきました。
これでしのぐことにします。
ありがとうございました。

2001/12/21 15:37 Community User への返信

JIS キーボードを使っていらっしゃるとすると、
もしかして
option + ¥
がお望みの動作じゃないでしょうか?

2002/02/25 07:40 Community User への返信

似たような問題で行き詰まってます。
便乗質問すみません。
AppleScriptでTerminalへバックスラッシュを渡したいのですが、
どうもうまくいきません。
ドロップレットを作り、ファイルやフォルダをDrag&Dropする事によって、
パスを取得し、Mac OS式の":"をTerminal式の"/"に変更し、
フルパスを渡したいのです。
私の環境では、半角スペースを使ったフォルダがたくさんあり、
出来る事ならこのまま渡せないかと頑張っているのですが、
バックスラッシュの壁に当たり、このトピックを見つける事が出来ました。
英語フォントにする、U.S.スクリプトでoptionキーを押しながら入力する、
円マークのままやってみる。と、どれもダメでした。
うまく動かない例を書きますので、何かヒントがあればアドバイスを頂けると幸いです。
on open Drop_List
set Old_Delimiters to AppleScript's text item delimiters
repeat with Obj in Drop_List
tell application "Finder"
activate
set Item_Path to Obj as text
set AppleScript's text item delimiters to ":" as Unicode text
set Path_List to text items 1 thru -2 of Item_Path
repeat with A in Path_List
set contents of A to A & "/"
end repeat
set Full_Path to "/Volumes/" & Path_List as text
if Full_Path contains (" " as Unicode text) then
set AppleScript's text item delimiters to " " as Unicode text
set Space_Words to text items 1 thru -2 of Full_Path
repeat with B in Space_Words
set contents of B to B & "¥¥ "
end repeat
set Full_Path to (Space_Words as text) & last text item of Full_Path
end if
tell application "Terminal" to do script with command "cd " & Full_Path
end tell
end repeat
set AppleScript's text item delimiters to Old_Delimiters
end open

2002/02/25 08:28 Community User への返信

AppleScript の事はよく判らないんですが,単に single quote (')で囲んでやればいいんじゃないでしょうか? Shell で特別扱いされる文字は空白以外にも $ や back slash 自身など色々あって,それぞれを全部処理するのは大変だと思いますけど。
Single quote (') で囲めば特別な処理が必要なのは,colon (:) と single quote 自身だけですみます。

2002/02/25 08:56 Community User への返信

koguleさん、ありがとうございます!!!
ぬぉ〜!すばらしい!
例えば、
[localhost:‾] shoo% cd /Volumes/FILE/'Music File'/'Cyndi Lauper'/
で、いけるんですね。あ〜、なんという無知さ。
私は普段、FinderからフォルダをTerminalへDrag&Dropしてました。
すると、/Volumes/FILE/Music¥ File/Cyndi¥ Lauper という表示になります。
だからバックスラッシュをどうにかしなければいけないと思ってました。
「single quote」覚えました。後はAppleScriptを書き換えるだけです。
本当にありがとうございました。
--追記
--修正した物を記しておきます。
on open Drop_List
set Old_Delimiters to AppleScript's text item delimiters
repeat with Obj in Drop_List
tell application "Finder"
activate
set Item_Path to Obj as text
set AppleScript's text item delimiters to ":" as Unicode text
set Path_List to text items 1 thru -2 of Item_Path
repeat with A in Path_List
set contents of A to A & "/"
end repeat
set Full_Path to "/Volumes/" & Path_List as text
if Full_Path contains (" " as Unicode text) then
set AppleScript's text item delimiters to "/" as Unicode text
set Space_Words to text items 1 thru -2 of Full_Path
repeat with B in Space_Words
if B contains (" " as Unicode text) then set contents of B to "'" & B & "'"
set contents of B to B & "/"
end repeat
set Full_Path to (Space_Words as text) & last text item of Full_Path
end if
tell application "Terminal" to do script with command "cd " & Full_Path
end tell
end repeat
set AppleScript's text item delimiters to Old_Delimiters
end open

2002/02/25 09:40 Community User への返信

koguleさん、ありがとうございます!!!
ぬぉ〜!すばらしい!
例えば、
[localhost:‾] shoo% cd /Volumes/FILE/'Music File'/'Cyndi Lauper'/
で、いけるんですね。あ〜、なんという無知さ。
私は普段、FinderからフォルダをTerminalへDrag&Dropしてました。
すると、/Volumes/FILE/Music¥ File/Cyndi¥ Lauper という表示になります。
だからバックスラッシュをどうにかしなければいけないと思ってました。
「single quote」覚えました。後はAppleScriptを書き換えるだけです。
本当にありがとうございました。
--追記&訂正
--修正した物を記しておきます。
on open Drop_List
set Old_Delimiters to AppleScript's text item delimiters
repeat with Obj in Drop_List
set Item_Path to Obj as text
set AppleScript's text item delimiters to ":" as Unicode text
set Path_List to text items 1 thru -2 of Item_Path
repeat with A in Path_List
set contents of A to A & "/"
end repeat
set Full_Path to "/Volumes/" & Path_List as text
if Full_Path contains (" " as Unicode text) then
set AppleScript's text item delimiters to "/" as Unicode text
set Space_Words to text items 1 thru -2 of Full_Path
repeat with B in Space_Words
if B contains (" " as Unicode text) then set contents of B to "'" & B & "'"
set contents of B to B & "/"
end repeat
set Full_Path to (Space_Words as text) & last text item of Full_Path
end if
tell application "Terminal" to do script with command "cd " & Full_Path
end repeat
set AppleScript's text item delimiters to Old_Delimiters
end open

2002/02/25 10:18 Community User への返信

もっと云えば

[localhost:‾] shoo% cd /Volumes/FILE/'Music File'/'Cyndi Lauper'/
これも冗長で

[localhost:‾] shoo% cd '/Volumes/FILE/Music File/Cyndi Lauper'


で良いです。
# Bash 使いなんだけど,tcsh も多分一緒。

AppleScript で楽な遣り方かは判りませんが,基本的は戦略は

  1. colon (:) を slash (/) に換える
  2. single quote (') を single quote - back slash - single quote - sigle quote ('¥'') に換える
  3. 全体を single quote で囲む
でしょうか。

尤も /Volumes の処理もあるでしょうし,二番目で最初の問題がまた出てきそうですけどね。

2002/02/25 10:54 Community User への返信

も一つ。
'¥'' で駄目なら single quote - double quote - single quote - double quote - single quote ('"'"') で回避出来ます。
# 何やってるかは考えてみて下さい。
勿論日本語などは依然駄目ですけど。

2002/02/25 19:27 Community User への返信

koguleさん、再度お世話になります。
>[localhost:‾] shoo% cd '/Volumes/FILE/Music File/Cyndi Lauper'
これはすごい、というより自分が情けない。
全体をsingle quoteで囲ってしまう事へ考えが飛躍できなかったです。
半角スペースのあるフォルダにばかり気をとられていました。
なるほど〜、私が考えていた事は無駄な処理ばかり。
半角スペースを使っていても、使っていなくても全て囲んでしまえばいいのですね。
koguleさんに教えて頂いた戦略の内、1と3だけで完結します。
2は、今後バックスラッシュを渡したい時が来るまでの宿題とさせてください。
('"'"')の件も。←今のところ、何をやってるのかサッパリわかりません。
そもそも、基礎をしっかり積まなければいけないと痛感しております。
1.colon (:) を slash (/) に変換
2.頭に"'/Volumes/"を足して、尻に"'"を足す
これだけでいけました。9行もカットできました。
重ねて御礼を言わせてください。ありがとうございました。
on open Drop_List
set Old_Delimiters to AppleScript's text item delimiters
repeat with Obj in Drop_List
set Item_Path to Obj as text
set AppleScript's text item delimiters to ":" as Unicode text
set Path_List to text items 1 thru -2 of Item_Path
repeat with A in Path_List
set contents of A to A & "/"
end repeat
set Full_Path to "'/Volumes/" & (Path_List as text) & "'"
tell application "Terminal" to do script with command "cd " & Full_Path
end repeat
set AppleScript's text item delimiters to Old_Delimiters
end open

2002/02/28 00:04 Community User への返信

>1.colon (:) を slash (/) に変換
10.1.2以降、簡単にできるようになったとのことです。
http://www.apple.com/applescript/macosx/release_notes/181.html
某巨大掲示板で教えていただきました。
POSIX path of Item_Path の1行で済みます。
on open Drop_List
repeat with Obj in Drop_List
set Item_Path to Obj as text
set Full_Path to "'" & POSIX path of Item_Path & "'"
tell application "Terminal" to do script with command "cd " & Full_Path
end repeat
end open

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

Terminalでの"¥"の取り扱いについて

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。