bs脚本调用ls效果很好,直到我重命名了脚本运行的目录

问题描述 投票:0回答:2

我在/ home / maxg / SpProData中编写了一个bash脚本。运行得很好。该脚本的目标计算机目录称为/ home / maxg / sppro

为了在编写脚本的计算机上测试脚本,我将其从/ home / maxg / SpProData重命名为/ home / maxg / sppro。

我更改了脚本的主目录变量,现在它卡住了ls命令结果传递到变量的位置,就像这样:

_WORKING_ZIP=$(ls -td ${_SP_LINK_CFG_FILENAME}_${_PERF_DIR_NAME_PREFIX}Archive_${_TODAY_VARIANT}_* | head -1)

导致:

[info ] Looking for the PerformanceDataArchive (.zip) file ...
find ............. ArgyleCourt_PerformanceDataArchive_2020-05-09_*
ls: cannot access 'ArgyleCourt_PerformanceDataArchive_2020-05-09_*': No such file or directory
[error] (2) = ls had a more serious problem; e.g. directory or file not found... exiting!

常量是:

SP-LINK cfg file name...: ArgyleCourt
Perf DIR name prefix....: PerformanceData
Today variant...........: 2020-05-09
SP PRO directory........: /home/maxg/sppro

文件存在:

drwxrwxr-x  3 maxg maxg  4096 May 16 19:59 .
drwxr-xr-x 56 maxg maxg  4096 May 16 19:33 ..
-rw-r--r--  1 maxg maxg 55477 May  9 02:03 ArgyleCourt_PerformanceDataArchive_2020-05-09_02-03-07.zip
-rw-rw-r--  1 maxg maxg 56208 May 15 22:27 GetSpProData.awk
-rw-rw-r--  1 maxg maxg  1511 May 16 19:52 GetSpProData.conf
-rwxrwxr-x  1 maxg maxg 23530 May 16 20:04 GetSpProData.sh

在终端中运行命令将返回所需的结果:

ls ArgyleCourt_PerformanceDataArchive_2020-05-09_*
ArgyleCourt_PerformanceDataArchive_2020-05-09_02-03-07.zip

这完全没有道理。仅进行了两项更改:

  1. 重命名目录
  2. 将主目录常量更改为指向新名称。

...稍后:

我将目录名(和变量)改回了SpProData,同样的无效结果。

...稍后:

将脚本复制到目标计算机,它就运行了!(看起来像一个漫长的夜晚):(

bash shell ls
2个回答
1
投票

您提供的是相对路径而不是绝对路径。

尝试


_WORKING_ZIP=$(ls -td /home/maxg/sppro/${_SP_LINK_CFG_FILENAME}_${_PERF_DIR_NAME_PREFIX}Archive_${_TODAY_VARIANT}_* | head -1)

编辑:也不要parse ls

您可以使用


_WORKING_ZIP=$(head -1 <<< /home/maxg/sppro/${_SP_LINK_CFG_FILENAME}_${_PERF_DIR_NAME_PREFIX}Archive_${_TODAY_VARIANT}_*)

示例:

$ls my_file_is_here.txt
ls: cannot access 'my_file_is_here.txt': No such file or directory
$ls ~/test/my_file_is_here.txt
/home/renegade/test/my_file_is_here.txt
$cd ~/test/
$ls my_file_is_here.txt
my_file_is_here.txt
$

0
投票

嗯...感谢您的阅读,对不起您的发言。

只有两个更改?!不...三个变化...

我进一步声明,是的,请尽早...

cd $_SP_PRO_DIR

...太早了!在读取配置文件之前,该文件定义了此常量。

这导致cd语句不带参数。且不带参数的cd上升到父级。

因此ls命令找不到文件。

嗯,另一个难学的教训。 :)

© www.soinside.com 2019 - 2024. All rights reserved.