我有三个文件x,y和z以及一些内容。
如果我运行$cat x y z > z
,它似乎在将x和y写入z之前截断文件z。
我希望它只是将x,y和z的内容连接成到z中。有人可以解释为什么不是这样吗?另请解释我收到的这个警告
$ echo "one" > x
$ echo "two" > y
$ echo "three" > z
$ cat x y z
one
two
three
$ cat x y z > z
cat: z: input file is output file
$ cat z
one
two
答案 0 :(得分:5)
shell正在>z
上运行,在z
开始之前打开cat
输出并截断它。 cat
通过针对每个输入的inode检查stdout的inode来保护您免受无限循环(无限直到磁盘已满)。
答案 1 :(得分:-1)
单public class XmlReader
{
List<Season> Seasons;
private Season season;
private String text;
public XmlReader()
{
Seasons = new ArrayList<Season>();
}
public List<Season> getSeasons() {
return Seasons;
}
public List<Season> parse(InputStream is){
XmlPullParserFactory factory = null;
XmlPullParser parser = null;
try {
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
parser = factory.newPullParser();
parser.setInput(is, null);
int eventType = parser.getEventType();
while(eventType != XmlPullParser.END_DOCUMENT)
{
String tagname = parser.getName();
switch (eventType)
{
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase("season"))
{
season = new Season();
season.setSeason_id( (Integer.parseInt(parser.getAttributeValue(0)) ) );
season.setSeason_name( parser.getAttributeValue(1) );
}
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase("season"))
{
seasons.add(season);
}
else if (tagname.equalsIgnoreCase("page"))
{
season.setPage_id(Integer.parseInt(parser.getAttributeValue(0)));
season.setPage_text( parser.getAttributeValue(1) );
}
break;
default:
break;
}
eventType=parser.next();
}
}
catch (XmlPullParserException | IOException e)
{
e.printStackTrace();
}
return season;
}
}
覆盖运算符的RHS上的文件,而>
将LHS操作数附加到RHS操作数。你应该试试>>
。
如果您使用的是>>
,则可以使用此功能。