シェルスクリプトとファイルの相対位置

シェルスクリプトとファイルの相対位置

私はLinuxのシェルスクリプトやコマンドについて全く知りません。

というファイルがありますprojectx

projectXただusers/hardik/desktop/projectx

シェルスクリプトを作成しましたstart.sh。シェルスクリプトの内容は次のとおりです。

echo "Starting typescript build in new terminal.."

osascript -e 'tell application "Terminal" to do script "npm run build"' 

sleep 3

echo "Starting firebase functions...."

osascript -e 'tell application "Terminal" to do script "firebase emulators:start --only functions"'


echo "Process compelete.. Check if there were two terminals window open"

今これはうまくいきますが、ここでは次のように言います。

osascript -e 'tell application "Terminal" to do script "npm run build"'

ルートディレクトリで実行されているため、次のエラーが発生します。

ENOENT: そのファイルやディレクトリはありません。開いています。/Users/hardik/package.json

相対パスで実行するにはどうすればよいですか?start.sh

更新:試してみましたがうまくいきませんでした。

cd "$(dirname $(readlink -f "$0"))"
echo "Starting typescript build in new terminal.."
osascript -e 'tell application "Terminal" to do script "npm run watch:scss"' 
osascript -e 'tell application "Terminal" to do script "npm run watch"'
echo "Process compelete.. Check if there were two terminals window open"

上に録音した内容です。

readlink: illegal option -- f
usage: readlink [-n] [file ...]
usage: dirname path
Starting typescript build in new terminal..
tab 1 of window id 1579
tab 1 of window id 1580

以下のコードスニペットも機能しません。

cd -P -- "${0%/*}" || exit
echo "Starting typescript build in new terminal.."
osascript -e 'tell application "Terminal" to do script "npm run watch:scss"' 
osascript -e 'tell application "Terminal" to do script "npm run watch"'
echo "Process compelete.. Check if there were two terminals window open"

同じエラー

ベストアンサー1

スクリプトに cd -P -- "${0%/*}" || exitまたはを追加して、スクリプトがあるcd -P -- "$(dirname -- "$0")" || exit ディレクトリに移動できます。

$0組み込み変数インタプリタに格納されたスクリプトのパス。でスクリプトを探す場合は通常絶対パスです$PATH

この${0%/*}構成はシェルの組み込みを使用します。文字列演算/*ディレクトリ名だけが残るように、最後に一致する変数の最短ビットを削除します(通常は、$0これは少なくとも1つの文字が含まれている限り/機能します)。

おすすめ記事