簡體   English   中英

通過Bash腳本讀取文本文件中的行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM