bash 调用 ls 的脚本运行良好,直到我重命名脚本运行的目录
bash script calling ls worked perfectly until I renamed the directory the script runs in
我在 /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
运行终端中的命令returns期望的结果:
ls ArgyleCourt_PerformanceDataArchive_2020-05-09_*
ArgyleCourt_PerformanceDataArchive_2020-05-09_02-03-07.zip
这完全没有意义。仅进行了两项更改:
- 重命名目录
- 更改主目录常量以指向新名称。
...稍后:
我将目录名称(和变量)改回 SpProData,同样的无效结果。
...稍后:
已将脚本复制到目标机器并运行!
(看起来是一个漫长的夜晚):(
您给出的是相对路径而不是绝对路径。
尝试
_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
$
嗯...感谢您的阅读,抱歉耽误您的时间。
只有两个变化?!不...三个变化...
我把声明往上移了,是的,越早越好...
cd $_SP_PRO_DIR
……太早了!在读取配置文件之前,它定义了这个常量。
这导致了一个没有参数的 cd 语句。
没有参数的 cd 上升到父级别。
因此 ls 命令找不到文件。
嗯,又吸取了惨痛的教训。 :)
我在 /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
运行终端中的命令returns期望的结果:
ls ArgyleCourt_PerformanceDataArchive_2020-05-09_*
ArgyleCourt_PerformanceDataArchive_2020-05-09_02-03-07.zip
这完全没有意义。仅进行了两项更改:
- 重命名目录
- 更改主目录常量以指向新名称。
...稍后:
我将目录名称(和变量)改回 SpProData,同样的无效结果。
...稍后:
已将脚本复制到目标机器并运行! (看起来是一个漫长的夜晚):(
您给出的是相对路径而不是绝对路径。
尝试
_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
$
嗯...感谢您的阅读,抱歉耽误您的时间。
只有两个变化?!不...三个变化...
我把声明往上移了,是的,越早越好...
cd $_SP_PRO_DIR
……太早了!在读取配置文件之前,它定义了这个常量。
这导致了一个没有参数的 cd 语句。 没有参数的 cd 上升到父级别。
因此 ls 命令找不到文件。
嗯,又吸取了惨痛的教训。 :)