シェルスクリプトを設定するための実行権限を自動的に提供

シェルスクリプトを設定するための実行権限を自動的に提供

私はシェルスクリプトをたくさん使っています。文字通り、毎回スクリプトを作成して実行しようとしましたが、設定を忘れているため、権限エラーが発生します+x。これは非常に面倒なことのようです。シェル(zsh)が自動的に追加されるかどうかを尋ねる方法はありますか?単にエラーが発生するのではなく、権限を実行して再試行しますか?

できることを知っていますが、source my.sh購入はランニングと同じではなく、./my.sh後者が欲しいです。

答え1

スクリプトを作成する代わりに機能(そして既存のスクリプトを関数に変換します)。これにより、再び権限について心配する必要はありません。

スクリプトは関数に簡単に変換されます。

  1. .shファイル名から拡張子を削除します。 (技術的にはオプションですが、これは習慣です。.)
  2. ファイルの親ディレクトリが$fpath
  3. autoloadあなたの機能はあなたの.zshrc

異なるプロジェクトで異なる機能が必要な場合は、次のことをお勧めします。https://github.com/direnv/direnv。このようにして、各プロジェクトは独自の$fpath機能を持つことができますautoload

答え2

これは役に立つかもしれません:

function command_permission() {
  # Get the command being run
  local cmd="${1}"
  local cmd=$(echo "${cmd}" | awk '{print $1}' )

  # Check if it starts with "./" and if the file doesn't have execute permission
  if [[ "${cmd}" =~ ^\./ && ! -x "${cmd#./}" ]]; then
    # Prompt for permission to chmod +x the file
    read -rq "REPLY?${cmd#./} is not executable. Do you want to make it executable (y/n)? "
    "$cmd" "$@"

    if [[ "${REPLY}" =~ ^[Yy]$ ]]; then
      # Make the file executable
      chmod +x "${cmd#./}"
    fi

    # Add a newline after the prompt
    echo ""
  fi
}

# Set the preexec function to be called before running each command
autoload -Uz add-zsh-hook
add-zsh-hook preexec command_permission

関連情報