シェルスクリプトで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

関連記事

no image

VPS に Redmine を設置したときに対処したトラブル

Redmine のインストール自体は Redmine 2.3をCentOS 6.4にインストールする

記事を読む

icatch_8617990318-resized

yum が参照するミラーサイトの baseurl を変更して日本国内のものに設定する

yum が参照するリポジトリのミラーサイトは変更することができます。 このミラーサイトを日本国内のも

記事を読む

icatch-2015-004-1

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

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

記事を読む

icatch-2015-002

Optionalから値を取り出すにはorElseGet()を使う

「Optional が値を持っていない場合のみ ◯◯ を実行する」を実装するときは Optional

記事を読む

icatch-medium_4301351732-resized

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

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

記事を読む

icatch-markdown_6281167385_mini-thumbnail

Sublime Text3 で Markdown のシンタックスハイライトを有効にする手順

IT 関連の職場であれば、部署やチーム単位に Redmine とか Backlog を使って TOD

記事を読む

icatch-sublimetext_9222613858_mini-thumbnail

Sublime Text3 のインストール直後に行った設定メモ

突発的に自宅のマシンにインストールしてあった Sublime Text2 を 3 にアップデートしま

記事を読む

no image

IE9 のキャッシュ対策

どのようなバグだったのか POST で送信した内容を確認する画面で、最新の内容が表示されないという

記事を読む

no image

no space left と表示されたときの対処法

タイトルの "no space left" とは「書き込みたいけど、ディスクの飽

記事を読む

no image

GoogleGuavaのRangeを使って範囲判定を簡潔に書く

次のような判定処理を if 文で書くことがよくある。 もし 100 よりも大きければ(=大小判定

記事を読む

Googleアドセンス用(PC)

Message

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


一 + = 7

次の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 ↑