
いくつかのコマンドを実行する bash スクリプトがあります。コマンドはターミナルで入力すると正常に動作しますが、スクリプト内から実行しようとすると動作しません。これは環境固有の問題であると思われます。
私が書いた脚本では
exec "$cmd"
これは動作しませんが、$cmd の内容をコピーしてターミナルに貼り付けると正常に動作します。
スクリプトを実行するときに現在の環境を維持するにはどうすればよいですか? または、他に何かアイデアはありますか?
答え1
arr=(foo bar baz quux)
exec "${arr[@]}"
答え2
set -o allexport
bash スクリプトの先頭に入力します。これにより、定義したすべての変数が自動的にエクスポートされます。(これは不適切なスタイルであることに注意してください。適切な変数のみをエクスポートする方がよいでしょう)。
答え3
すべてのコマンドを同じディレクトリから実行する必要がある場合は、
cd /d $Location
スクリプトの先頭で、実行するコマンドの場所を設定します。
cd -- これはディレクトリ変更コマンドです。 /d -- このスイッチにより、cd はドライブとディレクトリの両方を一度に変更します。
/dなしでD:\scriptsからコマンドを実行したい場合は、
D:
cd \scripts
しかし、上記のコマンドを使えば1行で実行できます
cd /d D:\scripts
-再度編集-
申し訳ありません。明らかに BASH と書いてありますが、なぜか BATCH と読みました。今後はもっと注意します。