Bash 使用变量定义路径

Bash 使用变量定义路径,bash,path,cygwin,Bash,Path,Cygwin,我正在尝试将所有文件从源文件复制到工作文件夹,但它不工作,我的输出已完成,但文件未被传输到工作文件夹中您的问题可能是由以下原因造成的。Linux的行尾总是\n(一个换行符),但在Windows中却是\r\n(一个回车符后跟一个换行符) 在这里,在路径声明之后可能有一个回车符。 从脚本中删除回车字符,应该可以解决问题 如果您使用的是vim,则可以使用:set list命令查看文件中所有不可打印的字符。您的问题可能是由于以下原因造成的。Linux的行尾总是\n(一个换行符),但在Windows中却是

我正在尝试将所有文件从源文件复制到工作文件夹,但它不工作,我的输出已完成,但文件未被传输到工作文件夹中

您的问题可能是由以下原因造成的。Linux的行尾总是
\n
(一个换行符),但在Windows中却是
\r\n
(一个回车符后跟一个换行符)

在这里,在路径声明之后可能有一个回车符。 从脚本中删除回车字符,应该可以解决问题


如果您使用的是
vim
,则可以使用
:set list
命令查看文件中所有不可打印的字符。

您的问题可能是由于以下原因造成的。Linux的行尾总是
\n
(一个换行符),但在Windows中却是
\r\n
(一个回车符后跟一个换行符)

在这里,在路径声明之后可能有一个回车符。 从脚本中删除回车字符,应该可以解决问题


如果您使用的是
vim
,则可以使用
:set list
命令查看文件中所有不可打印的字符。

从错误消息判断

cp:目标“%r”不是目录

脚本中的换行符似乎有问题(
\r
回车符
)。您是否在Windows上编辑了该文件

您应该能够通过以下方式删除这些字符

#!/bin/bash
SOURCE="/C/MSDFFiles/IPFiles/Source"

WORKING="/C/MSDFiles/IPFiles/Working"

rm -rf ./Working/*

cp "$SOURCE/"* "$WORKING/" 2> /dev/null

echo "DONE"


从错误消息判断

cp:目标“%r”不是目录

脚本中的换行符似乎有问题(
\r
回车符
)。您是否在Windows上编辑了该文件

您应该能够通过以下方式删除这些字符

#!/bin/bash
SOURCE="/C/MSDFFiles/IPFiles/Source"

WORKING="/C/MSDFiles/IPFiles/Working"

rm -rf ./Working/*

cp "$SOURCE/"* "$WORKING/" 2> /dev/null

echo "DONE"



使用
2>/dev/null
隐藏错误不会帮助您找到它不起作用的原因:)尝试删除
2>/dev/null
即使我删除了2>/dev,它也不会起作用/null@Aparna
$SOURCE
$WORKING
是否存在?为什么要使用绝对路径和相对路径?如果我删除代码的2>/dev/null部分,我得到的是cp:target`\r'不是一个directory@htor它们存在时,工作文件夹可能会更改其位置,这就是为什么我希望将路径声明为变量,然后将它们移动到属性文件中使用
2>/dev/null
隐藏错误无法帮助您找到它不起作用的原因:)尝试删除
2>/dev/null
即使我删除了2>/dev,它也不会起作用/null@Aparna
$SOURCE
$WORKING
是否存在?为什么要使用绝对路径和相对路径?如果我删除代码的2>/dev/null部分,我得到的是cp:target`\r'不是一个directory@htor它们存在时,工作文件夹可能会更改其位置,这就是为什么我希望将路径声明为变量,然后将它们移动到属性文件中的原因。如果我添加2>/dev/null文件,那么这些路径似乎运行良好,但cp操作不起作用expected@Aparna我不明白你的评论与Ansgar给你的答案有什么关系?删除CR字符后,如果
cp
仍然失败。@Aparna您误解了
2>/dev/null
的功能。同样,这种重定向只是抑制错误消息。错误本身仍然存在。@AnsgarWiechers-非常感谢您的快速响应,我的脚本正在按预期工作,谢谢提示:-)如果我添加了2>/dev/null文件,那么是的。该文件似乎运行良好,但cp操作无法正常工作expected@Aparna我不明白你的评论与Ansgar给你的答案有什么关系?删除CR字符后,如果
cp
仍然失败,你应该会得到另一个错误。@Aparna你误解了什么
2>/dev/null
没有。同样,这种重定向只是抑制错误消息。错误本身仍然存在。@AnsgarWiechers-非常感谢您的快速响应,我的脚本现在正在按预期工作,谢谢您的提示:-)我不认为这是运输问题的问题,如果我直接指定文件夹名称,那么就改为变量文件将以相同的方式传输script@Aparna你“想”?你真的检查过了吗?我确实检查过了,它可以很好地处理文件夹名称,而variableVariables将有
\r
,从以其值结尾的行开始;在中间行的硬编码字符串将不会。这不是问题,而是变量,如果我直接给定文件夹名文件是用同样的方法传输的。script@Aparna你“想”?你真的检查过了吗?我确实检查过了,它可以很好地处理文件夹名称,而variableVariables将有
\r
,从以其值结尾的行开始;在中间行的硬编码字符串将不会。
mv script.sh script.tmp
cat script.tmp | tr -d '\r' > script.sh
rm script.tmp
sed -i "s/\r//g" script.sh