実行すると ls などの基本コマンドが見つからなくなる。このスクリプトへの指摘として正しいものは?
#!/bin/bashPATH=/opt/app/binexport APP_ENV=productioncd /opt/app./start.sh正答
- PATH に export が付いていないので、2 行目は無視されて PATH が空のままになっています。
- PATH を /opt/app/bin だけで上書きしています。追加するなら PATH="$PATH:/opt/app/bin" と書きましょう。
- cd は PATH から探すコマンドなので、4 行目で cd が見つからずに止まっています。
- export APP_ENV=production の値を引用符で囲んでいないので、export に失敗しています。
解説
PATH はコマンドを探すディレクトリをコロン区切りで並べた環境変数である。2 行目は既存の値を捨てて /opt/app/bin だけにしているため、/usr/bin などにある ls や grep が見つからなくなる。追加したいなら元の値を含めて書く。PATH は最初から export 済みなので、export が無くても代入はそのシェルと子プロセスに効き「無視される」は誤り。cd は組み込みコマンドなので PATH に依存しない。
参考: www.gnu.org
この問題を含む Linux・シェル のテストを制限時間つきで解く
Linux・シェルクイズへ