これは私が選択したディレクトリに私を導く簡単なスクリプトですが、期待どおりに動作しません。
#!/bin/bash
showMenu() {
echo "1) ocaml"
echo "2) python"
echo "3) csharp"
}
while [ 1 ]
do
showMenu
read CHOICE
case $CHOICE in
"1")
"cd ~/projects/practice/ocaml"
;;
"2")
"cd ~/projects/practice/python"
;;
"3")
"cd ~/projects/practice/csharp"
;;
esac
done
必要なすべてのフォルダが用意されています。
(2) [01:19 PM] ls projects/practice/
csharp/ ocaml/ python/ scripts/ web/
出力:
(2) [01:19 PM] choice
1) ocaml
2) python
3) csharp
1
/home/nanda/bin/choice: line 15: cd ~/projects/practice/ocaml: No such file or directory
1) ocaml
2) python
3) csharp
スクリプトは明らかにディレクトリを見つけることができません。
cd
ある種の代替(${}
または使用)を使用して各オプションの下にコマンドを入れる必要があると思います{}
が、これを行う方法がわかりません。
cd
また、各コマンドの後にbreakステートメントを追加する必要がありますか?
. choice
期待どおりに動作するように最善を尽くしてください。より良いことは、次のエイリアスを入力したがうまくいったことです。
alias choice='. choice'
引用:
https://stackoverflow.com/questions/255414/why-doesnt-cd-work-in-a-bash-shell-script
https://askubuntu.com/questions/84279/how-to-change-directory-using-script
https://stackoverflow.com/questions/874452/change-current-directory-from-a-script
ベストアンサー1
コマンドは引用符内にあります。これにより、シェルはcd ~/projects/practice/ocaml
それをコマンド名として扱います。このコマンドがないため、このエラーメッセージが表示されます。ファイル名にスペースを含めることができるため、名前にスペースを含むコマンドを使用できます。実行したい場合は、やったように引用符を使用することです。
cd
ただし、シェルはパスを引数として使用してコマンドを実行したいと思います。リモートで引用すると正常に動作します。
break
スクリプトでステートメントを使用する必要があるかどうかは、ディレクトリを変更した後に実行する操作によって異なります。ループを離れたい場合はこれを使用する必要があります。
ノートこのスクリプトを実行した後、cd
シェルスクリプトのコマンドは現在のディレクトリを変更しません。source
スクリプトを実行すると、新しいプロセスが作成され、親プロセスではなく現在のcd
プロセスと子プロセスの現在のディレクトリにのみ影響するため、スクリプト内の現在のディレクトリにのみ影響します(実行の代わりに使用しない限り)。現在のディレクトリを処理します。