• ベストアンサー

bashでのシェル変数の遅延展開

こんにちは。 現在、Cygwinでbashを使っています。 最近思ったのですが、コマンドプロンプトにおける環境変数の遅延展開のような機能が、 bashでは存在しないのでしょうか? 例えば、~/.bashrcで alias cdb="cd $OLDPWD" と記述しておき、ディレクトリを移動する度に、このエイリアスの動作が変化するようにしたいと思っています。 何か御存じの方がいらっしゃれば、是非アドバイスを頂きたいです。 では、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4845/10256)
回答No.2

' ' で囲めばそのときには変数は展開されません。 alias cdb='cd $OLDPWD'

MetalLover
質問者

お礼

御回答ありがとうございます。 なるほど、そういう手がありましたか。 これを使えば、aliasで、環境変数を上手く利用できそうですね。 勉強になりました。

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.1

遅延展開などというものではないですが alias cdb='cd `echo $OLDPWD`' とか ただ$OLDPWDにcdしたいだけなら、そのようなことしなくても alias cdb="cd -" でいいような

MetalLover
質問者

お礼

御回答ありがとうございます。 cd - で直前のディレクトリに移動できる事は知りませんでした。 助かりました。 遅延展開という表現は、よろしくなかったですね。 分かりにくくて申し訳ございませんでした。

関連するQ&A

  • cygwin で "bash --login -i"するとホームディレクトリに移動してしまう

    cygwin で startx から X-Window を使いたいと思っています。 私は cygwin.bat を使わずに、コマンドプロンプトから直接 bash とタイプしています。(エクスプローラから好きなディレクトリでコマンドプロンプトを開くことができるようにしてあります) (1) コマンドプロンプトから bash とタイプとすると、startx とタイプしても反応がありません。 (2) bash --login -i とタイプすると、startx はできるのですが、ディレクトリが勝手に cygwin のホームディレクトリに移動してしまいます。 ディレクトリを移動せずに cygwin を起動して xwindow を使う方法はないでしょうか?

  • bash --login -i ??

    windows の cygwin でセットアップされる cygwin.bat を見ると、 bash --login -i と書いてあります。 --login 、-i とは何だろう、と思って man bash とすると、 --login はログインシェル -i はインタラクティブモード となっています。 (1) ログインシェルとはなんでしょう? 気づいたこととしては、コマンドプロンプトから bash と入力するだけのときと、--login をつけたときでは、プロンプトがちがうようです。(.bashrcを読み込まない?) (2) インタラクティブモードとはなんでしょう。 -i をつけたときとつけなかったときで、特に目に見えた違いはわからなかったのですが。。

  • .bash_profileの内容について

    Fedoraを使っています。環境設定ファイル.bash_profileで、 if [ -f /etc/bashrc ]; then . /etc/bashrc fi とありますが、これは、/etc/bashrcがあればそれを実行しなさいということはわかりますが、/etc/bashrcの前に記述されている、「.」は何を意味しているのでしょうか。カレントディレクトリにあればという意味なら、./bashrcと推測するのですが

  • CygWinで 「bash-3.2$」と表示される

    Windows Vista を使用しており、 http://musashi.sourceforge.jp/cygwin/cygwin.html http://musashi.sourceforge.jp/cygwin/cygwin.html を参考にCygWinをインストール、環境設定を行いました。 ショートカットから起動させると、はじめはプロンプトが「ログイン名@PC名」になっていましたが、インストールしたパッケージなどを「CygWin」という新規フォルダへ保存した後にもう一度起動しようとすると起動できなかったので、「CygWin.bat」の中身を   -------------------------------- @echo off D: chdir D:\usr\local\CygWin\bin bash --login -i -------------------------------- のように編集しました。(chdirの行に \CygWin を追加した) しかし、もう一度起動すると今度はプロンプトが「bash-3.2$」という表示に変わってしまいました。 CygWinインストールのWEBページを見ているとこの表示ではうまくインストール出来ていないと書いてあるのですが、どうしたら「ログイン名@PC名」と表示するようにできるでしょうか。 「cd HOME」のコマンドが通らないため .bashrc ファイルがうまく読み込めていないのかと思い保存する場所を変えたり試行錯誤しましたが、うまくいきません…

  • bashシェルスクリプトで空白がある場合のコマンドは変数にどう記述したらいいのでしょうか?

    bashのシェルスクリプトで #!/bin/bash -x CMD=/bin/service portmap restart;/bin/service nfslock restart;/bin/service nfs restart $CMD としたのですが2行目で既にコマンドが実行されてしまいます。 空白がある場合のコマンドは変数にどう記述したらいいのでしょうか?

  • .bashrcがCygwinに反映しない

    Cygwinをインストール後、カスタマイズするためにプロンプトの上に 表示される「ユーザ名@計算機名」を変更しました。それに伴い、 初期に自動作成される、/home/Owner が意味を持たなくなってしまい 新たに変更したユーザ名のフォルダを作成し、そこに.bashrcを新規に 作成しましたが、.bashrcに記述したaliasが反映しません。 また、Cygwin上で「alias ls="ls -F"」としてもCygwinを再起動すると 設定が初期化されてしまいます。 aliasの設定を反映させるにはどうしたらいいのでしょうか? ご回答おねがいします。

  • cygwin/bashとDOSの共通時間待ち

    timeoutというコマンドがありますが、bashとWindows(DOS)でそれぞれ意味が違います。 DOSのtimeoutでバッチファイルを作り、 DOSでも、cygwin/bashから呼び出しても動作するようにしたかったのですが、 うまく行きませんでした。 たぶん動くだろうと期待した、 cmd.exe /c timeout /T 10 は、cygwin/bashはbashのtimeoutと認識し、DOSのtimeoutとは認識しません。 つまりDOSでは動くのですが、cygwin/bashから起動しても正しく動作しません。 timeoutは、DOSでは少くとも外部コマンドではないと思うのですが、 単純に内部コマンドでもないかもしれません。 しょうがないのでpingを使って両用の待ちを実現していますが、 正直この種の方法は好きではありません。 何かいい方法はありますでしょうか?

  • 環境変数について

    OSはRedHatLinux9、シェルはbashを使っているのですが、環境変数(パスの設定)はどこのファイルに書くのが一般的なのでしょうか? それぞれのユーザのホームディレクトリでls -aとしたら、.bash_profile、.bashrcがあり、/etcにはprofileがあります。 最近は、.bash_profileにパスを設定するのですが、あまり他のファイルに書くのと何が違うのかわからずに書き込んでいます。できれば、その違いまで教えていただければ幸いです。よろしくいお願いします。

  • シェルスクリプトで、ファイル名のワイルドカード展開を抑制する方法は?

    Cygwinのbashスクリプトの記述方法について質問です。「*.zip」等のワイルドカード付き文字列を関数引数に渡す時、「*」のまま渡す(展開を抑制する)方法はあるでしょうか? 例えば、次のbashスクリプトコードを実行します。 f(){ echo $1 } f *.zip すると、*.zipに合致するファイル名が全て表示されてしまいます。これを「*.zip」と表示させる(*を展開させない)方法を知りたいです。''や""で囲んで試みましたが、ダメでした。 数ヶ月前のCygwinでは展開されなかったのですが、最近のCygwinで挙動が変わってしまいました。そこで対処法がどうしても分からず質問させて頂きました。どうぞ宜しくお願い致します。 環境:WinXP Pro.、Cygwin(sh.exeのバージョンは3.2.33)

  • シェルスクリプト内のcdで、カレントディレクトリを変えるには?

    シェルスクリプト内のcdコマンドで、カレントディレクトリを変えるにはどうしたらいいか?をどうか教えて下さい。 MS-DOSのバッチファイル内で"cd XXXXX"と書き実行した時の動作を、UNIX(CygWin)環境でも行いたいです。 が、シェルスクリプトは(サブシェルで動く為)カレントディレクトリが変わってくれません。aliasコマンド等でいろいろ実験しましたが、DOSバッチファイルのように「バッチファイル単体でディレクトリ移動が出来る方法」を探し出せませんでした。 極めて初歩的とは存じますが、どうか宜しくお願い致します。