我刚开始使用bash所以我希望答案不明显。 我有一个名为playlists.txt的文件,如下所示:
我想将每行的第一个字符串分配给$ name,将第二个字符串分配给$ hash,然后将其发送到script.sh,并为每一行递归执行此操作,知道将来可能会增加行数
我写了这个,但它不起作用: 使用此 - > How to split one string into multiple variables in bash shell?
while read name hash
do
sh script.sh "$name" "$hash"
done < playlists.txt
我应该做什么呢? 提前谢谢。
编辑:谢谢大家,所以我把它改成了这个,它更容易阅读。我想,它会解决我的错误,但仍然存在......该死的。 基本上,在script.sh中,这是第一部分:cd ~/Music/Youtube\ Playlist/Playlists/$name
mv $HOME/Music/Youtube\ Playlist/Playlists/$name/TextRecords/lastoutput.txt $HOME/Music/Youtube\ Playlist/Playlists/lastoutput.txt
但是,shell返回错误:
mv: cannot stat `/home/kabaka/Music/Youtube Playlist/Playlists//TextRecords/lastoutput.txt': No such file or directory
这意味着在应该有播放列表名称的地方,什么也没有。你知道为什么吗?是因为我当前脚本中的$ name和上面脚本中的$ name不一样?请注意,我对$ hash发生了同样的事情,它应该出现在一个url中,但只是空白
答案 0 :(得分:1)
接近工作,只说read name hash
而不是read line
while read name hash; do
sh script.sh "$name" "$hash"
done < playlists.txt
答案 1 :(得分:1)
以下是代码:
while read line
do
name=`echo $line|cut -f1 -d' '`
hash=`echo $line|cut -f2 -d' '`
sh script.sh $name $hash
done < playlists.txt
关于第二个问题:在将文件移动到目录之前,请确保它存在。您可以使用&mkdir -p&#39;创建它。如下:
mkdir -p $HOME/Music/Youtube\ Playlist/Playlists/lastoutput.txt
答案 2 :(得分:-1)
你几乎就在那里,有几种方法可以做到这一点,但一个典型的解决方案是
while read name hash
do
sh script.sh $name $hash
done < playlists.txt
IHTH