删除从 Bash 中的输入文件读取的回车符 returns
Remove carriage returns read from input file in Bash
Bash 脚本:
#!/bin/bash
set -x
parent_folder=$(dirname $PWD)
// read from project-list file and assign to array
mapfile -t arr <project-list.txt
for i in "${arr[@]}"; do
cd "$parent_folder/$i"
done
问题:bash: cd: $'/d/workspace/node/notification-service\r': Not a directory
。正在添加 \r
。如何预防?
如果由于某种原因不能从 project-list.txt
中删除它们(否则这个问题就没有任何意义),请在扩展 arr
.
时删除它们
for i in "${arr[@]%$'\r'}"; do
...
您可以更改 mapfile
语句以先使用 tr
删除 \r
:
mapfile -t arr < <(tr -d '\r' < project-list.txt)
之后检查数组内容使用:
declare -p arr
如何预防?
取决于您所说的预防是什么意思。首先,我不会将它们放入项目-list.txt。一定是在某个地方以某种方式创建了这个文件,并且很少有真正需要在文件中包含回车符 returns 。预防将从这里开始。
如果出于某种原因无法做到这一点,您可以通过 dos2unix
:
运行 文件
mapfile -t arr <(dos2unix project-list.txt)
或者,如果 git-bash 不支持进程替换(我没有安装它,所以我不能尝试这个),你做一个
dos2unix <project-list.txt >project-list.sanitized
mapfile -t arr <project-list.sanitized
Bash 脚本:
#!/bin/bash
set -x
parent_folder=$(dirname $PWD)
// read from project-list file and assign to array
mapfile -t arr <project-list.txt
for i in "${arr[@]}"; do
cd "$parent_folder/$i"
done
问题:bash: cd: $'/d/workspace/node/notification-service\r': Not a directory
。正在添加 \r
。如何预防?
如果由于某种原因不能从 project-list.txt
中删除它们(否则这个问题就没有任何意义),请在扩展 arr
.
for i in "${arr[@]%$'\r'}"; do
...
您可以更改 mapfile
语句以先使用 tr
删除 \r
:
mapfile -t arr < <(tr -d '\r' < project-list.txt)
之后检查数组内容使用:
declare -p arr
如何预防?
取决于您所说的预防是什么意思。首先,我不会将它们放入项目-list.txt。一定是在某个地方以某种方式创建了这个文件,并且很少有真正需要在文件中包含回车符 returns 。预防将从这里开始。
如果出于某种原因无法做到这一点,您可以通过 dos2unix
:
mapfile -t arr <(dos2unix project-list.txt)
或者,如果 git-bash 不支持进程替换(我没有安装它,所以我不能尝试这个),你做一个
dos2unix <project-list.txt >project-list.sanitized
mapfile -t arr <project-list.sanitized