#bash #shell #sh
#bash #оболочка #sh
Вопрос:
Привет, я новичок в программировании и bash, мне дали следующий код и сказали запустить его, чтобы установить некоторые необходимые инструменты. Я скопировал и вставил это в терминал, и установка не увенчалась успехом. Я также скопировал и вставил это в .sh
файл и выполнил его в терминале, но я ничего не запускал. что я здесь делаю не так
# Shell Scripting Reference:
# Link: https://tldp.org/LDP/abs/html/
function install_brew {
# Brew Reference: https://brew.sh/
# Homebrew Cheatsheet: https://devhints.io/homebrew
echo "function::install_brew"
if [[ ! $(command -v brew) ]]; then
brew_url="https://raw.githubusercontent.com/Homebrew/install/master/install.sh"
echo "Homebrew is not installed , downloading it"
$(command -v sh) -c "$(curl -fsSL $brew_url)"
else
echo "Homebrew is already installed!"
fi
echo $(command -v brew)
}
function install_jdk {
echo "function::install_jdk"
brew install scala
brew install sbt
echo "Finding Shells"
currentShell=$(ps -p $$ -ocomm=)
echo "Your current shell is: $currentShell"
export PATH="/usr/local/opt/openjdk/bin:$PATH"
export CPPFLAGS="-I/usr/local/opt/openjdk/include"
# Depending on the environment you use, you may need to update
# your shell's boot config to persist changes
if [[ $currentShell =~ "sh" ]]; then
if [[ $(grep -Fxq 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' ~/.bashrc) ]]; then
echo "Appending to PATH (sh) for OpenJDK installation"
echo 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' >> ~/.bashrc
echo 'export CPPFLAGS="-I/usr/local/opt/openjdk/include"' >> ~/.bashrc
sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
else
echo "OpenJDK setup already complete (SH)."
fi
else if [[ $currentShell =~ "zsh" ]]; then
if [[ $(grep -Fxq 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' ~/.zshrc) ]]; then
echo "Appending to PATH (zsh) for OpenJDK installation"
echo 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' >> ~/.zshrc
echo 'export CPPFLAGS="-I/usr/local/opt/openjdk/include"' >> ~/.zshrc
sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
else
echo "OpenJDK setup already complete (ZSH)."
fi
fi
fi
echo $($(command -v java) -version) amp;amp; echo $($(command -v scala) -version)
}
function install_spark {
# Reference: Scala Spark Setup
# https://learnscalaspark.com/getting-started-intellij-scala-apache-spark
# Reference: PySpark Setup
# https://medium.com/@achilleus/get-started-with-pyspark-on-mac-using-an-ide-pycharm-b8cbad7d516f
echo "function::install_spark"
pkgs=("apache-spark" "python" "virtualenv")
for i in "${pkgs[@]}"
do
brew install $i
done
# If you're creating a new virtualenv or even if you're using the one pathed on your computer, you can use pip to install pyspark
}
function install_optionals {
echo "function::install_optionals"
optionals=("terraform" "apache-flink")
for i in "${optionals[@]}"
do
brew install $i
done
}
#install_brew
#install_jdk
#install_spark
#install_optionals
Комментарии:
1. Последние 4 строки закомментированы. Вам необходимо удалить
#
2. Кстати, обратите внимание, что это медленнее и сложнее, чем просто запуск.
$(command -v java) -version
java -version
3. … это не единственный антипаттерн здесь, что неудивительно — ABS TLDP несколько печально известен тем, что обучает плохим практикам. В качестве места для начала вы можете рассмотреть wiki.bash-hackers.org/scripting/obsolete и BashPitfalls для описания того, чего следует избегать, BashGuide и BashFAQ , поскольку документация лучше ориентирована на передовую практику, и shellcheck.net (который также может быть установлен локально как инструмент командной строки) в качестве инструмента для выявления распространенных ошибок.
4. если вам ничего не помогло из комментариев выше меня. пожалуйста, подтвердите, что ваш скрипт sh является исполняемым. вы можете запустить: chmod x file_name.sh
Ответ №1:
да, я согласен с вышесказанным относительно отмены комментариев к последним 4 строкам. Единственной другой вещью, которую я заметил, был отсутствующий shebang.
Убедитесь, что файл начинается с: #!/bin/bash
Затем отметьте исполняемый файл: chmod x scriptname.sh
Ответ №2:
В вашем коде bash вы определили 4 функции, но вы не вызывали функции в своем скрипте.
Вам нужно будет запустить каждую функцию. Вы можете сделать это, не комментируя последние 4 строки вашего скрипта.
Комментарии:
1. Если вы добавляете ответ, который только повторяет то, что кто-то сказал в комментарии, хотя и не является строго обязательным, то по правилам этикета следует отметить этот ответ community-wiki (чтобы не получать очки репутации за то, что не является оригинальным контентом).
2. @CharlesDuffy не публиковался на SO более 5 лет. Не зная о функции community-wiki. Спасибо за совет.
3. @CharlesDuffy Кроме того, прокомментированное решение не объясняет, почему раскомментирование строк решает проблему. Как опытный преподаватель, я утверждаю, что это важный компонент хорошего ответа и представляет собой «оригинальный контент»