シェルスクリプトでcdしたいパスにスペースが入っている場合の対処法

公開日: : 最終更新日:2014/09/09 プログラム ,

cd したいパスにスペースが入っていると、パスの先頭からスペースまでを「移動したいパス」と解釈されてしまい、ちょっとハマりました。

解決はできたんですが、きっと忘れてしまうのでメモしておきます。

icatch_8626992930

photo credit: TommyHAGA via photopin cc

目次

1. スペースが含まれるパスに cd すると「そのようなファイルやディレクトリはありません」とエラーメッセージが出力される

スペースが入ったディレクトリ名(フォルダ名)を付けなきゃいいだけの話なんですが、Windows だとそうもいかないフォルダが存在しますよね。”My Document” とか “My Dropbox” とか。なんでこんなフォルダ名がデフォルトなんでしょうか。。。

例えば Dropbox の同期ディレクトリ(My Dropbox)に 普通に cd すると、「そのようなファイルやディレクトリはありません」とエラーメッセージが出力されてしまいます。

サンプルとしてこんなシェルスクリプトを作成してみました。

#!/bin/bash

MY_DROPBOX="/path/to/My Dropbox"

cd $MY_DROPBOX
echo `pwd`

で、これを実行してみると、次のように表示されて cd に失敗します。

sample.sh: line 5: cd: /path/to/My: No such file or directory

パスの先頭からスペースまでを「移動したいパス」と解釈して、そこへの移動を試みるもディレクトリが存在しないから失敗する、ということですね。

2. パスをダブルクォートで囲むと cd できる

これの解決は至ってシンプルで、cd コマンドの引数をダブルクォートで囲むだけです。

先ほどのシェルスクリプトをこんな風に修正します。

#!/bin/bash

MY_DROPBOX="/path/to/My Dropbox"

cd "$MY_DROPBOX"
echo `pwd`

で、これを実行してみると、次のように表示されて cd に成功したことが分かります。

$ sh sample.sh 
/path/to/My Dropbox

3. まとめ

以上、シェルスクリプトで cd したいパスにスペースが入っている場合の対処法でした。

とりあえず知っておくと良さそうなことなのでメモしておきました。

  • 移動先のパスにスペースが付きそうな場合は、変数名をダブルクォートで囲む

4. その他 Linux に関する記事

その他の Linux に関する記事は次の通りです。
気になる記事があったらぜひチェックしてみてください!

小さな会社の新米サーバー/インフラ担当者のためのLinuxの常識

  • 著者中島 能和
  • 価格¥ 1,814(2014/09/08 時点)
  • 出版日2014-08-22
  • 商品ランキング21829 位
  • 大型本223 ページ
  • ISBN-104883379426
  • 出版社ソシム

Linuxコマンドライン入門 1日目 (ネット時代の、これから始めるプログラミング(NextPublishing))

  • 著者大津 真
  • 価格(2014/09/08 時点)
  • 出版日2014-09-05
  • 商品ランキング5893 位
  • 大型本79 ページ
  • ISBN-10
  • 出版社インプレスR&D

Googleアドセンス用(PC)

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

関連記事

icatch-_9692711856-resized

シェルスクリプトでメールを送信する

このブログを運用している Linux サーバの監視スクリプトを作成した記事を書きました。 ロード

記事を読む

icatch-8785445626_587fdac14d_z-resized

検証用の CentOS をインストールした直後に行う初期設定手順

職場でも自宅でも Linux で検証したい作業があったので VMware に 64 ビット版の Ce

記事を読む

20140811-00

64ビット版のCentOSをVMwareにインストールできない場合の対処法

Linux で検証したい作業が多かったので VMware に検証環境を作りました。OS は Cent

記事を読む

icatch-8442052993_2978189f52_z-resized

参照可能な yum リポジトリを確認する yum コマンドとワンライナー

あるパッケージをインストールするために配布リポジトリの設定を追加することがあります。 ビジネスユー

記事を読む

icatch-medium_4301351732-resized

mp3splt を実行して “undefined symbol: mp3splt_u_check_if_directory” と出力されたときの対処法

mp3 ファイルを分割してくれる mp3splt というライブラリがあります。 mp3 ファイルを

記事を読む

icatch_4365495446-resized

CentOS6.5にGitをソースコードからインストールする

CentOS 6.5 の64ビット版を "Minimal" でインストールした環境で、git sta

記事を読む

no image

CVS でタグ間で変更があったファイルを抽出するスクリプト

今どきバージョン管理ツールに CVS を使っているところは珍しいと思うし、あまり需要はないだろうけど

記事を読む

icatch-vagrant_box_customize

VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する

配布されている Vagrant の Box ファイルを使って検証環境を構築することが多くなってきた。

記事を読む

icatch-2015-005-1

ユニットテストの偏りを防ぐ命名規則の付け方

ユニットテスト名に以下の命名規則を付けるようにして二ヶ月ぐらい経った。 正常系テストの場合: 正

記事を読む

icatch-thumbup_3507728739_mini-thumbnail

Sublime Text3 に SublimeLinter-jshint をインストールしてみた

エディタに Eclipse を使って Java のプログラムを書くことが多いんですが、JavaScr

記事を読む

Googleアドセンス用(PC)

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


八 − 2 =

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Googleアドセンス用(PC)

icatch-jersey_multi_pathparams
Jerseyの@PathParamはスラッシュの間に複数指定できる

http://hoge-api/user/{id}.{format}

icatch-vagrant_box_customize
VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する

配布されている Vagrant の Box ファイルを使って検証環境を

icatch-2015-006-1
バリデーションチェックにJava8のOptionalを使ってスマートに書く(自分比)

Web アプリのバリデーションチェックにアノテーションを使うことが増え

icatch-2015-005-1
ユニットテストの偏りを防ぐ命名規則の付け方

ユニットテスト名に以下の命名規則を付けるようにして二ヶ月ぐらい経った。

icatch-2015-004-1
Vagrantで起動したCentOS上のOctopressをホストOSから確認する設定

タイトルの通りだが、Vagrant を使って起動した CentOS に

→もっと見る

PAGE TOP ↑