37

なぜcdシェルスクリプトで動作しないのか疑問に思います。次のようになります、

#!/bin/sh
cd test
mkdir $(date +%d-%mm-%Y)

これを実行すると、CDをテストできません

cd: 2: can't cd to /test

なんでこんな感じ?

4

10 に答える 10

64

私も同じ問題を抱えていました。問題は\r\n行末であることが判明しました。

それを修正するには、

tr -d "\r" < oldname.sh > newname.sh

http://talk.maemo.org/showthread.php?s=1cadd53b369d5408c2b9d53580a32dc4&t=67836&page=2から

于 2012-07-11T08:21:23.517 に答える
10

この質問にはあまり関係ありません。同じエラーメッセージが表示されましたが、使用していました

cd ~/foo/bar

これを次のように変更した後

cd $HOME/foo/bar

修正されました。

于 2015-05-17T18:54:32.083 に答える
4

私はこの問題を抱えていて、しばらくの間非常に混乱していました。

通常、通常のコマンドが$CDPATH通常どおり機能するようにする環境変数を設定したことがわかりました。cdただし、動作が少し異なる「sh」(「bash」ではない)として、スクリプトを非対話モードで実行していました。次のようなコマンドのようです:

cd subdir  # works via interactive bash; not in script run via sh.

が設定されている場合でも、対話型ログイン シェル bash で期待どおりに動作しますCDPATH。ただし、スクリプトで(を使用してsh)同じコマンドを実行すると、失敗しました

myscript.sh: line 9: cd: subdir: No such file or directory

相対パスになるように変更しました:

cd ./subdir

そしてそれは動作します!違いは、シェルの使用方法にあると思いますCDPATH。場合によっては、CDPATH 現在のディレクトリの両方を検索しますが、スクリプトでは のみを検索しますCDPATH。これは の動作に似ていますPATH.(現在のディレクトリを) から除外する場合は、そのファイルを実行するだけでなく、PATH入力する必要があります。./localbinarylocalbinary

これは私の経験に基づいた推測です。設定/設定解除すると、コマンドがCDPATH中断/中断解除され、すべての場合に機能します。cd subdircd ./subdir

于 2012-09-19T01:45:30.827 に答える
3

pwd最初の行として配置します。次に、そのディレクトリに test サブディレクトリがあるかどうかを確認します。

ルートディレクトリから実行されているようです

于 2011-02-07T05:19:41.797 に答える
1

「」を使用して動作するようになりました

したがって、あなたの場合は次のようになります。

cd "test"

/マーカス

于 2012-08-19T11:36:00.447 に答える
0

スクリプトがどこから実行されているかによって異なります。スクリプトが $PATH にある場合は、コマンドを実行した現在のディレクトリ (作業ディレクトリ) に基づいています。

これが cron ジョブとして実行されるスクリプトである場合は、完全なディレクトリ パスを使用することをお勧めします。
例:
cd /ホーム/ユーザー/テスト

スクリプトが $PATH にある場合は、完全なパスを指定することもできます。

于 2011-02-07T05:20:13.293 に答える
0

2「そのようなファイルまたはディレクトリはありません」のエラー番号です。testスクリプトの作業ディレクトリにスクリプトが存在しますか?

最初に既知の「適切な」ディレクトリに移動してから、その適切なディレクトリの既知の子ディレクトリに cd しcdたい場合あります。

于 2011-02-07T05:20:58.977 に答える