在脚本中运行ls时,通配符不起作用

时间:2015-03-02 10:58:55

标签: bash ls

我正在编写一个脚本,它将为给定的流程实例选择最后创建的文件。

我在脚本中使用的命令是

CONSOLE_FILE=`ls -1 "$ABP_AJTUH_ROOT/console/*${INSTANCE}*" | tail -1`

但是当脚本执行时,上面的命令变为

ls -1 '....../console/*ABP*'

由于单引号,*未被视为通配符,并且输出如下:

ls -1 $ABP_AJTUH_ROOT/console/*${INSTANCE}* | tail -1
+ ls -1 '/tcusers1/dev/aimsys/devtc1/var/dev/projs/ajtuh/console/*UHMF_RT_1085*'
+ tail -1
ls: /tcusers1/dev/aimsys/devtc1/var/dev/projs/ajtuh/console/*UHMF_RT_1085*: No such file or directory
+ CONSOLE_FILE=''

在删除'后,它正在命令行上工作来自命令,但在上面提到的脚本中使用时无法正常工作

tc1@gircap01!DEV:devtc1/Users/RB/AIMOS_CLEANUP_CANSUB> ls -l '/tcusers1/dev/aimsys/devtc1/var/dev/projs/ajtuh/console/*UHMF_RT_1085*'
ls: /tcusers1/dev/aimsys/devtc1/var/dev/projs/ajtuh/console/*UHMF_RT_1085*: No such file or directory
devtc1@gircap01!DEV:devtc1/Users/RB/AIMOS_CLEANUP_CANSUB> ls -l /tcusers1/dev/aimsys/devtc1/var/dev/projs/ajtuh/console/*UHMF_RT_1085*
-rw-r--r-- 1 devtc1 aimsys  72622 Feb 17 20:55 /tcusers1/dev/aimsys/devtc1/var/dev/projs/ajtuh/console/ADJ1UHMINFUL_UHMF_RT_1085_console_20150217_205519.log
-rw-r--r-- 1 devtc1 aimsys 177039 Feb 17 21:02 /tcusers1/dev/aimsys/devtc1/var/dev/projs/ajtuh/console/ADJ1UHMINFUL_UHMF_RT_1085_console_20150217_210203.log

2 个答案:

答案 0 :(得分:1)

您不能在通配符周围使用双引号,因为这会将星号转换为文字字符。

CONSOLE_FILE=`ls -1 "$ABP_AJTUH_ROOT"/console/*"$INSTANCE"* | tail -1`

应该有效,但请注意针对http://mywiki.wooledge.org/ParsingLs和一般http://mywiki.wooledge.org/BashPitfalls

的警告

答案 1 :(得分:0)

尝试

CONSOLE_FILE=`eval ls -1 "$ABP_AJTUH_ROOT/console/*${INSTANCE}*" | tail -1`

此外,如果您想要上次创建的文件,请使用ls -1tr