[英]Reading lines in a text file by Bash Script
我將讀取文本文件中的行:
$SSH_PRIVATE_FILE="address"
我想以一種為已定義的SSH_PRIVATE_FILE
分配值的方式閱讀和評估該行。
以下是docker文件的內容
ARG SSH_PRIVATE_FILE
COPY build-params build-params
RUN while IFS='' read -r line || [ -n "$line" ]; do\
echo "Text read from file: $line";\
eval `$line`;\
done < "build-params"
RUN echo $SSH_PRIVATE_FILE
更新
但是它返回錯誤:/ bin / sh:1:$ SSH_PRIVATE_FILE =“〜/ .ssh / id_rsa”:找不到
Bourne型外殼程序具有內置的機制,可以讀取文本文件的內容並評估每一行(即) .
指示。 (GNU bash在名稱source
下具有相同的功能,但這不是 POSIX Shell標准的一部分,並且Docker基本映像中的某些非常輕量級的Shell不支持它。)在Shell級別,您所擁有的書面等同於
. ./build-params
但是,每個Dockerfile RUN行都運行一個單獨的容器,並在一個單獨的帶有干凈外殼環境的外殼中運行容器,因此,事實證明這是設置環境變量的一種非常糟糕的方法。 Dockerfile ENV指令效果更好。
此外,由於您正在編寫Dockerfile,因此您可以完全控制Dockerfile中的文件系統布局,並且實際上不需要將Docker容器中的事物的位置設置為可參數化的。 如果是憑據之類的東西,則可以使用docker run -v
選項將其注入到容器中。 如果我需要這樣的設置,我可以說我的Dockerfile
ENV SSH_PRIVATE_FILE=/ssh/id_rsa
然后實際啟動容器
docker run -v $HOME/.ssh:/ssh ...
而不是完全將其作為構建時選項。
只是一個瘋狂的猜測,但我會嘗試在每行的每個\\
之前放置一個空格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.