echo `/usr/sbin/service 后缀状态`;列出文件夹中的文件并附加后缀状态
echo `/usr/sbin/service postfix status`; lists files in folder and appends postfix status
我从 bash 得到一个奇怪的行为,我找不到解决办法。
我的 2 行脚本(在我的用户主文件夹中)
#!/bin/bash
echo `/usr/sbin/service postfix status`;
生成文件夹中的文件列表,并在末尾附加 postfix is running
:
aptupdate.txt aptUpdate.txt ca checksite.sh cronlist.sh customers defrag_DB.sh downloads firewall_rules.txt groupmembers.sh joomla.int.vhost mail mem_usage.py mysqltuner.pl old_watchdog.sh phpinfo.php processlist.txt test.py tuning-primer.sh watchdog.sh postfix is running
我尝试了多种组合。如果我不指定服务,则回显输出是服务命令的用法。如果我指定了一个服务但没有跟在它后面的动词,则会回显该服务的用法(即重新启动|停止|启动|状态)。
当我 运行 在终端中执行相同的命令时,我得到 * postfix is running
。
编辑
我相信前导星号导致文件被列出。
行
echo `/usr/sbin/service postfix status`;
有一些问题。除了已弃用的反引号语法和不必要的分号,这两个都不伤人,除了眼睛,最大的问题是缺少引号。
如果 /usr/sbin/service postfix status
打印 * postfix is running
那么该行将“变成”:
echo * postfix is running
然后 Bash 执行它的操作并将星号扩展为当前目录中所有文件的名称(如果存在)。
快速修复是添加一些引号:
echo "`/usr/sbin/service postfix status`";
或更简洁的版本:
echo "$(/usr/sbin/service postfix status)"
然而,这意味着执行一件事,将它打印到 STDOUT 的内容交给 echo
,以便 echo
可以将它打印到 STDOUT。换一种说法; echo
没有提供任何东西。取出后,我们剩下:
/usr/sbin/service postfix status
即不需要 $()
因为我们只想 运行 一个命令,也不需要引号因为命令的结果不会用于任何事情(它们将直接进入 STDOUT)。
编写 shell 脚本时,我推荐以下内容:
set -x
查看正在执行的内容。在这种情况下,它可能有助于看到星号被扩展。如果这对于生产来说太冗长,可以在一切正常后将其删除。
set -e
这样一个阶段失败的命令就不会搞乱后面命令的执行。这个在生产中可能也不错。
set -u
如果您 偏执狂 担心 (并且您知道自己在做什么)。
- http://www.shellcheck.net 偶尔在线,或者作为文本编辑器中的插件。
我从 bash 得到一个奇怪的行为,我找不到解决办法。
我的 2 行脚本(在我的用户主文件夹中)
#!/bin/bash
echo `/usr/sbin/service postfix status`;
生成文件夹中的文件列表,并在末尾附加 postfix is running
:
aptupdate.txt aptUpdate.txt ca checksite.sh cronlist.sh customers defrag_DB.sh downloads firewall_rules.txt groupmembers.sh joomla.int.vhost mail mem_usage.py mysqltuner.pl old_watchdog.sh phpinfo.php processlist.txt test.py tuning-primer.sh watchdog.sh postfix is running
我尝试了多种组合。如果我不指定服务,则回显输出是服务命令的用法。如果我指定了一个服务但没有跟在它后面的动词,则会回显该服务的用法(即重新启动|停止|启动|状态)。
当我 运行 在终端中执行相同的命令时,我得到 * postfix is running
。
编辑
我相信前导星号导致文件被列出。
行
echo `/usr/sbin/service postfix status`;
有一些问题。除了已弃用的反引号语法和不必要的分号,这两个都不伤人,除了眼睛,最大的问题是缺少引号。
如果 /usr/sbin/service postfix status
打印 * postfix is running
那么该行将“变成”:
echo * postfix is running
然后 Bash 执行它的操作并将星号扩展为当前目录中所有文件的名称(如果存在)。
快速修复是添加一些引号:
echo "`/usr/sbin/service postfix status`";
或更简洁的版本:
echo "$(/usr/sbin/service postfix status)"
然而,这意味着执行一件事,将它打印到 STDOUT 的内容交给 echo
,以便 echo
可以将它打印到 STDOUT。换一种说法; echo
没有提供任何东西。取出后,我们剩下:
/usr/sbin/service postfix status
即不需要 $()
因为我们只想 运行 一个命令,也不需要引号因为命令的结果不会用于任何事情(它们将直接进入 STDOUT)。
编写 shell 脚本时,我推荐以下内容:
set -x
查看正在执行的内容。在这种情况下,它可能有助于看到星号被扩展。如果这对于生产来说太冗长,可以在一切正常后将其删除。set -e
这样一个阶段失败的命令就不会搞乱后面命令的执行。这个在生产中可能也不错。set -u
如果您偏执狂担心 (并且您知道自己在做什么)。- http://www.shellcheck.net 偶尔在线,或者作为文本编辑器中的插件。