동지! 파일이 있습니다:
# cat file
'\\.\Aktiv Co. Rutoken S 00 00\USER1@R69-20180109'
'\\.\Aktiv Co. Rutoken S 00 01\USER2@R69-20180109'
한 줄씩 실행해야 합니다.
for LINE in `cat file`
do
/opt/cprocsp/bin/amd64/certmgr -inst -cont $LINE
done
하지만! 파일에는 '\. "set -x"를 사용하여 스크립트를 시작하면 다음이 표시됩니다.
+ for LINE in '`cat file`'
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont ''\''\\.\Aktiv'
Error
+ for LINE in '`cat file`'
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont Co.
Error
+ for LINE in '`cat file`'
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont Rutoken
Error
+ for LINE in '`cat file`'
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont S
Error
+ for LINE in '`cat file`'
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont 00
Error
+ for LINE in '`cat /home/user/Aktiv`'
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont '00\USER1@R69-20180109'\'''
+ for LINE in '`cat file`'
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont ''\''\\.\Aktiv'
Error
+ for LINE in '`cat file`'
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont Co.
Error
+ for LINE in '`cat file`'
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont Rutoken
Error
+ for LINE in '`cat file`'
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont S
Error
+ for LINE in '`cat file`'
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont 00
Error
+ for LINE in '`cat /home/user/Aktiv`'
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont '01\USER2@R69-20180109'\'''
이상적으로는 다음과 같아야 합니다.
/opt/cprocsp/bin/amd64/certmgr -inst -cont '\\.\Aktiv Co. Rutoken S 00 00\USER1@R69-20180109'
/opt/cprocsp/bin/amd64/certmgr -inst -cont '\\.\Aktiv Co. Rutoken S 00 01\USER2@R69-20180109'
이게 다 특별한 콘텐츠(파일)에서 나오는 것 같아요. 어떤 아이디어가 있나요?
답변1
cat file
예, 출력 을 반복하면성격.
한 가지 해결책:
PATH=/opt/cprocsp/bin/amd64:$PATH
while IFS= read -r line; do
certmgr -inst -cont "$line"
done <file
이렇게 하면 줄을 한 줄씩 읽고 백슬래시와 단어 사이의 공백을 올바르게 읽습니다. 인용문을 참고하세요 $line
. 바라보다""IFS=read-r-line" 이해".
원래는 내가 사용한 버전을 포함시켰지만 어떤 경우에는 이것이 데이터의 백슬래시를 xargs
유지하지 않고 작은따옴표를 제거했다는 것을 알았습니다 .file