なぜcd
シェルスクリプトで動作しないのか疑問に思います。次のようになります、
#!/bin/sh
cd test
mkdir $(date +%d-%mm-%Y)
これを実行すると、CDをテストできません
cd: 2: can't cd to /test
なんでこんな感じ?
私も同じ問題を抱えていました。問題は\r\n行末であることが判明しました。
それを修正するには、
tr -d "\r" < oldname.sh > newname.sh
http://talk.maemo.org/showthread.php?s=1cadd53b369d5408c2b9d53580a32dc4&t=67836&page=2から
この質問にはあまり関係ありません。同じエラーメッセージが表示されましたが、使用していました
cd ~/foo/bar
これを次のように変更した後
cd $HOME/foo/bar
修正されました。
私はこの問題を抱えていて、しばらくの間非常に混乱していました。
通常、通常のコマンドが$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
入力する必要があります。./localbinary
localbinary
これは私の経験に基づいた推測です。設定/設定解除すると、コマンドがCDPATH
中断/中断解除され、すべての場合に機能します。cd subdir
cd ./subdir
pwd
最初の行として配置します。次に、そのディレクトリに test サブディレクトリがあるかどうかを確認します。
ルートディレクトリから実行されているようです
「」を使用して動作するようになりました
したがって、あなたの場合は次のようになります。
cd "test"
/マーカス
スクリプトがどこから実行されているかによって異なります。スクリプトが $PATH にある場合は、コマンドを実行した現在のディレクトリ (作業ディレクトリ) に基づいています。
これが cron ジョブとして実行されるスクリプトである場合は、完全なディレクトリ パスを使用することをお勧めします。
例:
cd /ホーム/ユーザー/テスト
スクリプトが $PATH にある場合は、完全なパスを指定することもできます。
2
「そのようなファイルまたはディレクトリはありません」のエラー番号です。test
スクリプトの作業ディレクトリにスクリプトが存在しますか?
最初に既知の「適切な」ディレクトリに移動してから、その適切なディレクトリの既知の子ディレクトリに cd しcd
たい場合があります。