zshスクリプトでユーザー定義関数をsudoできません。

zshスクリプトでユーザー定義関数をsudoできません。

.dotファイル(.dotディレクトリではない)をディレクトリにコピーしたいと思います。これを行うには、オペレーティングシステム(MacOS)でユーザーパスワードを入力する必要があります。私はこれを行う関数を作成し、それを次のような大きなバックアップスクリプトに統合したいと思います。

#!/bin/zsh
source ~/.zshrc

set -o errexit
set -o nounset
set -o pipefail

copy_dotfiles()
{
  MAIN_PATH="/Users/user01/"
  DOTFILE_DIR="${MAIN_PATH}Documents/dot_files"
  echo $DOTFILE_DIR
  mkdir $DOTFILE_DIR
  for f in $MAIN_PATH.[!.]*; do
    if [[ -f $f ]]; then
      echo "$f" is a file
      DOTFILE=`echo $f | sed 's/\/Users\/user01\///g'`
      echo "$DOTFILE" is a file
      cp $f ${DOTFILE_DIR}/${DOTFILE} || exit 1
    elif [[ -d $f ]]; then
      echo "$f" is a dir
      continue
    else
      echo "$f is not valid"
      exit 1
    fi
  done
}

sudo copy_dotfiles || exit 1

ただし、スクリプトを実行すると、次の結果が表示されます。

sudo: copy_dotfiles: command not found

ベストアンサー1

sudoシェル関数ではありません。実行可能ファイルを実行する別の実行可能ファイルです。 :)

したがって、シェル機能を実行できません。それでもシェルスクリプトを実行できます!したがって、動作させるには、sudoこのスクリプトからこれを省略し、sudoを介してスクリプト全体を実行します。

あなた本当にsource ~/.zshrcとにかく削除する必要がありますが、特にスクリプトをrootとして実行するとき。

おすすめ記事