我有以下服务文件。
[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
。如果任何人可以指导它提取&#34;测试&#34;那将是很大的帮助。在变量中,所以我可以使用以下命令在psql中转储。
sql -U postgres -d database_name -c "SELECT c_defaults FROM user_info WHERE c_uid = 'Test'"
答案 0 :(得分:1)
如果您不介意使用awk
而不是纯粹的Bash,
这可以很容易:
awk '/^ExecStart=/ { print $NF; exit }' /path/to/input
您可以通过换入$(...)
:
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'"
或纯粹的Bash解决方案:
read_word() {
while read line; do
[[ "$line" == ExecStart=* ]] || continue
echo ${line//* }
return
done < /path/to/input
}
word=$(read_word)