linux bash 使用来自 csv 的字符串构建命令

linux bash build command with strings from csv

我对 bash(和 linux 整体)还很陌生。

一整天都在研究,认为这是一个我不理解的简单修复,但我已经尝试了一千种不同的方法,但仍然无法正常工作……需要一双额外的眼睛和一些建议。

我有一个 csv,其中只有一列托管在 PasswordVault 中托管的属性的名称,我需要使用 PasswordVault 客户端查询它们的密码。

这是一个有效的查询命令:

/opt/CARKaim/sdk/clipasswordsdk GetPassword -p AppDescs.AppID=TEST-APP -p Query="safe=TEST-SAFE;folder=root;object=TEST-SAFE.dev-pwd" -p RequiredProps=Address,UserName -o Password,PassProps.UserName

我在 CSV 中仅使用 2 个值进行测试:

TEST-SAFE.dev-pwd
TEST-SAFE.prd-pwd

当我执行以下操作时:

while IFS="," read f1
do
    echo $f1
    /opt/CARKaim/sdk/clipasswordsdk GetPassword -p AppDescs.AppID=TEST-APP -p Query="safe=TEST-SAFE;folder=root;object=**$f1**" -p RequiredProps=Address,UserName -o Password,PassProps.UserName
done < extractiontest.csv

我得到以下输出:

TEST-SAFE.dev-pwd -p RequiredProps=Address,UserName -o Password,PassProps.UserNameT-APP -p Query=safe=TEST-SAFE;folder=root;object=TEST-SAFE.dev-pwd TEST-SAFE.prd-pwd -p RequiredProps=Address,UserName -o Password,PassProps.UserNameT-APP -p Query=safe=TEST-SAFE;folder=root;object=TEST-SAFE.prd-pwd

似乎变量之后的字符串部分正在覆盖变量之前的字符串部分。

我试过将字符串分成多个变量并尝试将它们一个接一个地连接起来。

我尝试用 XXX 替换字符串,然后执行:

stri="${originalstring//XXX/${f1}}"
echo $stri

我试过了eval

我尝试了单引号和双引号的不同组合

我什至尝试将命令作为 csv 文件中的一行。

无法正常工作...:(

帮助? :)

非常感谢!

您的 CSV 文件似乎在行尾包含“\r”字符。更准确地说,该行以“\r\n”结尾,就像在 DOS/Windows 下一样。 在 Bash 行的末尾应该只包含一个 '\n' 字符。 一旦你从文件中删除“\r”,它就会很好地工作。对于大文件,您可以使用 "dos2unix < input.csv > correct.csv" 并为您的脚本使用 output.csv。