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。
我对 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。