シェルスクリプト内で実行した cd コマンドの結果のディレクトリへの移動を、そのシェルスクリプトを実行したターミナルに反映させたいと思い、次のようなコードを書いたのですが、"exec: cd: 見つかりません" と言われてしまいます。
#!/bin/bash
exec cd /tmp
対策として、次の2つが思い付きました。ただ、もっとエレガントに、シェルスクリプトの中だけで完結させる方法はないでしょうか。
o シェルスクリプトでは、移動したいディレクトリを echo するだけにする。そしてその結果に対して cd する。
o .bashrc の関数にする
exec は、fork せずに exec システムコールを呼ぶためのコマンドなので、組込コマンドである cd を呼んでも、「見つかりません」、となってしまいます。
質問にある "exec: cd: 見つかりません" は、"exec コマンドが cd を見つけることができない" という意味です。
質問であげられた方法以外に、以下のような感じで、期待してることができると思います。
後者は、こんな感じのスクリプトになります。
#!/bin/bash cd /tmp exec /bin/bash
exec は、fork せずに exec システムコールを呼ぶためのコマンドなので、組込コマンドである cd を呼んでも、「見つかりません」、となってしまいます。
質問にある "exec: cd: 見つかりません" は、"exec コマンドが cd を見つけることができない" という意味です。
質問であげられた方法以外に、以下のような感じで、期待してることができると思います。
後者は、こんな感じのスクリプトになります。
#!/bin/bash cd /tmp exec /bin/bash
コメント(4件)
おおよそ次のような Bashスクリプトです。 https://gist.github.com/1546092
Built-in コマンドにexecがないところから、シェルはbashではないのではありませんか?
OS は Ubuntu 11.04 です。uname -a すると以下のようになります。
Linux x200 2.6.38-13-generic #52-Ubuntu SMP Tue Nov 8 16:48:07 UTC 2011 i686 i686 i386 GNU/Linux
それから、type exec すると「exec はシェル組み込み関数です」と表示されます。