【问题标题】:Send 2 parameters to a script向脚本发送 2 个参数
【发布时间】:2013-01-13 12:21:16
【问题描述】:

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

  • ChilledDubstep PLYNrAD9Jn2WDwRrS_Uw6UR55K-c_s6EH4
  • 经典 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 中但只是空白

【问题讨论】:

  • 请参阅下面的@DigitalRoss 解决方案。作为参考,您的代码不起作用的原因是您读取了一个名为line 的变量,但尝试拆分一个名为STR 的变量。 name=${line% *} hash=${line#* } 会做到的。
  • 您应该打开一个新问题,而不是不断修改现有问题。

标签: bash variables send


【解决方案1】:
  1. 您可以使用管道将 echo 命令的输出用作输入文件,
  2. 标志“-d”定义了“剪切”命令的分隔符。

代码如下:

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' 创建它,如下所示:

mkdir -p $HOME/Music/Youtube\ Playlist/Playlists/lastoutput.txt

【讨论】:

    【解决方案2】:

    你快到了,有几种方法可以做到这一点,但一个典型的解决方案是

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

    IHTH

    【讨论】:

      【解决方案3】:

      快要上班了,直接说read name hash而不是read line

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

      【讨论】:

      • 谢谢!你能看看我在第一篇文章中编辑的另一个问题吗?
      • 可能是你的参数在$1$2中。除非您指定它们,否则它们不会在 $name 中。该脚本由不同的 shell 运行,它对调用脚本的变量一无所知。如果您将script.sh 的内容设为shell 函数,那么它将知道您的变量。
      • 哦,太好了!非常感谢!!我将两个脚本合并到同一个文件中,一切都很完美!你会推荐一个网站来解决所有这些看起来如此简单的愚蠢事情,除非你去问别人,否则通常不会解释?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多