- ベストアンサー
bashでのシェル変数の遅延展開
こんにちは。 現在、Cygwinでbashを使っています。 最近思ったのですが、コマンドプロンプトにおける環境変数の遅延展開のような機能が、 bashでは存在しないのでしょうか? 例えば、~/.bashrcで alias cdb="cd $OLDPWD" と記述しておき、ディレクトリを移動する度に、このエイリアスの動作が変化するようにしたいと思っています。 何か御存じの方がいらっしゃれば、是非アドバイスを頂きたいです。 では、よろしくお願い致します。
- MetalLover
- お礼率78% (353/448)
- Linux系OS
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
' ' で囲めばそのときには変数は展開されません。 alias cdb='cd $OLDPWD'
その他の回答 (1)
- wormhole
- ベストアンサー率28% (1619/5653)
遅延展開などというものではないですが alias cdb='cd `echo $OLDPWD`' とか ただ$OLDPWDにcdしたいだけなら、そのようなことしなくても alias cdb="cd -" でいいような
お礼
御回答ありがとうございます。 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 をつけたときとつけなかったときで、特に目に見えた違いはわからなかったのですが。。
- 締切済み
- その他(OS)
- .bash_profileの内容について
Fedoraを使っています。環境設定ファイル.bash_profileで、 if [ -f /etc/bashrc ]; then . /etc/bashrc fi とありますが、これは、/etc/bashrcがあればそれを実行しなさいということはわかりますが、/etc/bashrcの前に記述されている、「.」は何を意味しているのでしょうか。カレントディレクトリにあればという意味なら、./bashrcと推測するのですが
- ベストアンサー
- Linux系OS
- 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を使って両用の待ちを実現していますが、 正直この種の方法は好きではありません。 何かいい方法はありますでしょうか?
- ベストアンサー
- Linux系OS
- シェルスクリプトで、ファイル名のワイルドカード展開を抑制する方法は?
Cygwinのbashスクリプトの記述方法について質問です。「*.zip」等のワイルドカード付き文字列を関数引数に渡す時、「*」のまま渡す(展開を抑制する)方法はあるでしょうか? 例えば、次のbashスクリプトコードを実行します。 f(){ echo $1 } f *.zip すると、*.zipに合致するファイル名が全て表示されてしまいます。これを「*.zip」と表示させる(*を展開させない)方法を知りたいです。''や""で囲んで試みましたが、ダメでした。 数ヶ月前のCygwinでは展開されなかったのですが、最近のCygwinで挙動が変わってしまいました。そこで対処法がどうしても分からず質問させて頂きました。どうぞ宜しくお願い致します。 環境:WinXP Pro.、Cygwin(sh.exeのバージョンは3.2.33)
- ベストアンサー
- Linux系OS
- シェルスクリプト内のcdで、カレントディレクトリを変えるには?
シェルスクリプト内のcdコマンドで、カレントディレクトリを変えるにはどうしたらいいか?をどうか教えて下さい。 MS-DOSのバッチファイル内で"cd XXXXX"と書き実行した時の動作を、UNIX(CygWin)環境でも行いたいです。 が、シェルスクリプトは(サブシェルで動く為)カレントディレクトリが変わってくれません。aliasコマンド等でいろいろ実験しましたが、DOSバッチファイルのように「バッチファイル単体でディレクトリ移動が出来る方法」を探し出せませんでした。 極めて初歩的とは存じますが、どうか宜しくお願い致します。
- ベストアンサー
- Linux系OS
お礼
御回答ありがとうございます。 なるほど、そういう手がありましたか。 これを使えば、aliasで、環境変数を上手く利用できそうですね。 勉強になりました。