【问题标题】:bash script, with multiple scriptsbash 脚本,带有多个脚本
【发布时间】:2013-11-23 06:35:03
【问题描述】:

我创建了 2 个 bash 脚本。如果我跑:

./script2 $1 $2 $3

脚本按预期工作;但是,如果我使用脚本 1 运行调用脚本 2,它似乎会失败。

脚本1

while read line; do
    echo $line > values
    name1=$(cat values | tr ';' '\n' | grep -v tftp)
    name2=$(cat values | tr ';' '\n' | grep tftp)
    echo $name1
    echo $name2
    ./script2 $name1 $name2 $3
done < /home/list

据我所知,脚本 2 中的预期命令似乎在由脚本 1 初始化时失败。我得到以下输出,但它没有显示我的文件传输,而如果我要手动初始化 script2,我会看到文件传输正在发生。

blucero@tftp password: spawn scp -r file1 tftp1:.
blucero@tftp password: spawn scp -r file2 tftp1:.

Script2只是一系列文件传输到各种tftp盒子

expect -c "spawn scp -r /home/file1 tftp1.$1:. ; expect password: ; send $3\r ; interact ;"
expect -c "spawn scp -r /home/file2 tftp1.$1:. ; expect password: ; send $3\r ; interact ;"
expect -c "spawn scp -r /home/file3 tftp1.$1:. ; expect password: ; send $3\r ; interact ;"
expect -c "spawn scp -r /home/file3 tftp1.$1:. ; expect password: ; send $3\r ; interact ;"

【问题讨论】:

  • 我在您的代码中没有看到 script1。你是如何运行它的?
  • script1 是我从 bash 提示符中初始化的脚本。我只需键入 ./script1 即可运行它
  • 请添加 script2 正在做什么,最好是 script2 的内容,以及当一切按预期工作时您所期望/应该发生的确切情况。
  • 您的script1$3,但没有$1$2。这几乎肯定是一个错误。 (从您的评论看来,它似乎根本不应该有任何参数?)
  • set -x 放在script1 的顶部,这样你就可以看到它正在执行的所有命令,并填充了变量。这应该有助于你调试它。

标签: linux bash shell


【解决方案1】:

尝试用引号将您的参数括在 script2 中(在 script1 shell 脚本中):

./script2 "$name1" "$name2" "$3"

您似乎有需要转义的特殊 shell 字符。

【讨论】:

  • 我认为你需要六个双引号,而不仅仅是两个;该脚本似乎采用三个单独的参数。
  • 是的,正确的这会将它们视为单个参数。更新了答案。非常感谢。
  • 其实我之前在这个网站上看的时候发现了这个解决方案,其实没有影响。
猜你喜欢
  • 2018-03-22
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 2021-01-15
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多