Linux Unix脚本在读取“行”时循环cat文件;没有这样的文件或目录;错误

Linux Unix脚本在读取“行”时循环cat文件;没有这样的文件或目录;错误,linux,shell,ksh,su,Linux,Shell,Ksh,Su,我有一个脚本,它读取一个参数文件,并将使用该脚本中每一行的值执行一些操作。我的输入文件使用空格作为分隔符 奇怪的是,它可以在旧版本的Linux上工作,但不能在新版本上工作 #! /bin/ksh su root "cat /var/opt/OV/tmp/HPOV_gg.log" | while read Line do echo "${Line}" done 错误:bash:cat/var/opt/OV/tmp/HPOV_gg.log:没有这样的文件或 目录 这个错误与新的Linux版本

我有一个脚本,它读取一个参数文件,并将使用该脚本中每一行的值执行一些操作。我的输入文件使用空格作为分隔符

奇怪的是,它可以在旧版本的Linux上工作,但不能在新版本上工作

#! /bin/ksh
su root "cat /var/opt/OV/tmp/HPOV_gg.log" | while read Line
do
   echo "${Line}"
done
错误:bash:cat/var/opt/OV/tmp/HPOV_gg.log:没有这样的文件或 目录

这个错误与新的Linux版本有关,以不同的方式解析cat命令


我怎样才能解决这个问题?或者我可以重写脚本,让它在这个新的Linux版本上工作。

最好使用sudo以root用户身份执行命令。不需要引号,可以通过配置文件以细粒度的方式控制sudo访问

sudo cat /var/opt/OV/tmp/HPOV_gg.log | while ...

正如您所知,您可以通过编写
su root-c“cat文件”
来修复su命令。命令需要通过
-c
选项传递。但是,sudo还是更好。

最好使用sudo作为root用户执行命令。不需要引号,可以通过配置文件以细粒度的方式控制sudo访问

sudo cat /var/opt/OV/tmp/HPOV_gg.log | while ...

正如您所知,您可以通过编写
su root-c“cat文件”
来修复su命令。命令需要通过
-c
选项传递。但是,sudo还是更好。

你能编辑你的问题以包含
su root“ls-l/var/opt/OV/tmp/HPOV_gg.log”
?[elp000161(root):/root]su root“ls-l/var/opt/OV/tmp/HPOV_gg.log”bash:ls-l/var/opt/OV/tmp/HPOV_gg.log的输出吗?没有出现问题的文件或目录。我像John建议的那样添加了a-c参数,现在它可以工作了。您可以编辑您的问题以包括
su root“ls-l/var/opt/OV/tmp/HPOV_gg.log”
?[elp000161(root):/root]su root“ls-l/var/opt/OV/tmp/HPOV_gg.log”bash:ls-l/var/opt/OV/tmp/HPOV_gg.log的输出吗?没有出现问题的文件或目录。我像John建议的那样添加了a-c参数,现在它可以工作了。