2017-08-10 44 views
1

我有以下服務文件。使用bash腳本從文件訪問word

[Unit] 
Description=Airflow celery worker daemon 
After=network.target 

[Install] 
WantedBy=multi-user.target 

[Service] 
EnvironmentFile=-/etc/sysconfig/airflow 
User=airflow 
Group=airflow 
Type=simple 
Restart=on-failure 
RestartSec=10s 
ExecStart=/usr/local/bin/airflow worker -q Test 

我想提取總是會ExecStart=/usr/local/bin/airflow worker -q後,在「測試」形式的文件。它可以是任何東西,而不僅僅是「測試」。

我有下面的代碼:

file="file path" 
while IFS= read line 
do 
     # display $line or do somthing with $line 
     echo "$line" 
     if [ "$line" = *"ExecStart"* ]; then 
       echo "It's there!" 
     fi 


done <"$file" 

但是,我不能echo It's there。如果任何人都可以指導它在變量中提取「Test」,那麼它將會非常有幫助,所以我可以使用以下命令將其轉儲到psql中。在$(...)包裝

awk '/^ExecStart=/ { print $NF; exit }' /path/to/input 

您可以在一個變量保存此:

sql -U postgres -d database_name -c "SELECT c_defaults FROM user_info WHERE c_uid = 'Test'" 

回答

1

如果你不介意使用awk,而不是純粹的猛砸, 這可以很容易

word=$(awk '/^ExecStart=/ { print $NF; exit }' /path/to/input) 

然後你可以將它嵌入到SQL命令中:

sql -U postgres -d database_name -c "SELECT c_defaults FROM user_info WHERE c_uid = '$word'" 

或純巴什解決方案:

read_word() { 
    while read line; do 
     [[ "$line" == ExecStart=* ]] || continue 
     echo ${line//* } 
     return 
    done < /path/to/input 
} 

word=$(read_word)