我在主機中運行的 sh 檔案中有以下腳本:
printf '\n\n=== Installing asdf ...\n\n'
docker container exec "$CONTAINER_NAME" sh -c 'git clone https://github.com/asdf-vm/asdf.git /root/.asdf --branch v0.10.2'
docker container exec "$CONTAINER_NAME" sh -c 'echo ''. /root/.asdf/asdf.sh'' >> /root/.bashrc'
docker container exec "$CONTAINER_NAME" sh -c 'echo ''. /root/.asdf/completions/asdf.bash'' >> /root/.bashrc'
printf '\n\n=== Installing node/npm using asdf ...\n\n'
NODEJS_VERSION='17.9.0'
docker container exec "$CONTAINER_NAME" sh -c 'asdf plugin add nodejs'
docker container exec "$CONTAINER_NAME" sh -c "asdf install nodejs $NODEJS_VERSION"
docker container exec "$CONTAINER_NAME" sh -c "asdf global nodejs $NODEJS_VERSION"
執行 line時asdf plugin add nodejs出現以下錯誤:
sh: 1: asdf: not found
整個問題正在發生,因為$PATH在安裝asdf. 我試過了:
- 安裝后重新加載 .bashrc/.profile
asdf
docker container exec "$CONTAINER_NAME" sh -c '. /root/.bashrc'
- 重新啟動容器:
docker "$CONTAINER_NAME" restart
(不是那么)奇怪的是,當我進入容器時,我可以使用 asdf,因為正如預期的那樣,它包含檔案夾$PATH的路徑。asdf
有人知道我在這里想念什么嗎?
uj5u.com熱心網友回復:
每個都exec運行一個新行程,該行程在終止時會丟失所有設定。您需要使用正確的選項啟動一個新的 Bash shell以讀取.bashrc……或者放棄嘗試將其互動式功能用于非互動式腳本,而是將這些命令放在腳本中,然后簡單地運行它。
docker container exec "$container_name" bash '
printf "%s\n" "=== Installing asdf ..."
git clone https://github.com/asdf-vm/asdf.git /root/.asdf --branch v0.10.2
. /root/.asdf/asdf.sh
# . /root/.asdf/completions/asdf.bash
printf "%s\n" "=== Installing node/npm using asdf ..."
nodejs_version="17.9.0"
asdf plugin add nodejs
asdf install nodejs "$nodejs_version"
asdf global nodejs "$nodejs_version"'
我無法讓自己保留診斷訊息中的所有換行符。
切向參見正確的 Bash 和 shell 腳本變數大寫,這解釋了為什么我將變數與容器名稱和節點版本更改為小寫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/503763.html
上一篇:Shell腳本命令有助于縮短?
