【问题标题】:How to run a shell script from another shell script reading first shell script name from a CSV file如何从另一个 shell 脚本运行 shell 脚本,从 CSV 文件中读取第一个 shell 脚本名称
【发布时间】:2019-02-10 08:09:01
【问题描述】:

我有一个用 bash 编写的父脚本(parent.sh):

#!/bin/bash
IFS=","
cat testing.csv | while read line 
do
abcd="$line"
eval "$abcd";
done

用 bash 编写的子脚本(child.sh),我想从 parent.sh 调用:

#!/bin/bash

date

在父脚本中,我正在做 cat csv file(testing.csv) 来读取 child.sh 的名称, csv 文件列中提到的子文件的名称,如下所示:

./child.sh

注意:child.sh、parent.sh 和 testing.csv 所有文件都在同一路径

从 csv 读取它的名称时,我总是收到“没有这样的文件或目录”错误,并且无法从 parent.sh 执行 child.sh。

子脚本和父脚本都具有 chmod 777 权限 我尝试了所有语法来在父级中执行子级,例如: sh child.sh , bash child.sh , source child.sh 但没有成功。

请帮帮我!

【问题讨论】:

  • “在同一路径中”...那么在 what 路径中?该路径是否包含在进程的PATH 环境变量中?你设置了吗?
  • @arkascha 不,没有 PATH 环境。变量集,我的意思是它在同一个文件夹中
  • 这对我有用,未经修改。您收到的确切错误消息是什么?您是否有可能在 CSV 文件中出现杂散的 Windows 行尾?如果我强制 Windows 行结尾,我会收到错误“:没有这样的文件或 directoryd.sh”...
  • @Jon ,是的,这是我得到的确切错误“没有这样的文件或 directoryd.sh”
  • @Jon,从你的观点 "stray windows line" ,我得到了一个线索,并在互联网上找到了一个 sed -e 's/\r/\n/g' 来解决这个问题:) , 你在dos2unix下面的评论因为没有安装所以不生效,我也没有权限安装,但是我的问题终于解决了

标签: linux bash shell csv


【解决方案1】:

所以问题是 CSV 文件中有 Windows 行结尾。如果你跑

dos2unix testing.csv

问题应该会消失。

此外,IFSeval 的使用可能会让人不快。尝试类似

#!/bin/bash

while IFS="," read executable
do
        "$executable"
done <testing.csv

【讨论】:

    猜你喜欢
    • 2012-01-11
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 2020-11-04
    相关资源
    最近更新 更多