将2个参数发送到脚本

时间:2013-01-29 20:03:49

标签: bash variables send

我刚开始使用bash所以我希望答案不明显。 我有一个名为playlists.txt的文件,如下所示:

  • ChilledDubstep PLYNrAD9Jn2WDwRrS_Uw6UR55K-c_s6EH4
  • Classical PLYNrAD9Jn2WDWZFpIG3a2tkOBtdeNAbc6
  • ChilledOut PLYNrAD9Jn2WCfrUCoS22kn3pBX1XUFinE
  • SlickSlickSound PLYNrAD9Jn2WDmpu3gNVxIVO8bAiOcQkx7
  • 专辑,音乐会PLYNrAD9Jn2WD3BI8o5VjmSbhZgfYh5zaX

我想将每行的第一个字符串分配给$ 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中,但只是空白

3 个答案:

答案 0 :(得分:1)

接近工作,只说read name hash而不是read line

while read name hash; do
    sh script.sh "$name" "$hash"
done < playlists.txt

答案 1 :(得分:1)

  1. 您可以使用管道
  2. 将echo命令的输出用作输入文件
  3. 旗帜&#39; -d&#39;定义了“剪切”的分隔符。命令。
  4. 以下是代码:

    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