Questions tagged «shell-script»

有关shell脚本,由shell解释的可执行文件(bash,zsh等)的问题。


3
在这种情况下,$ {1:0:2}是什么意思?
我正在查看下面显示的代码,它检查输入的行/列参数是否以-r或开头-c。${1:0:2}在这种情况下是什么意思? rowArgName="-r" colArgName="-c" if [ "${1:0:2}" != $rowArgName ] && [ "${1:0:2}" != $colArgName ] then echo $correctCmdMsg >&2 exit 1 fi


2
如何不进行递归
我正在尝试使用目录中的模式ls一些文件。我只想扫描第一个级别而不递归。 我的剧本: for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*) do echo $i; done 以上命令以递归方式扫描。如何仅扫描第一级目录?
19 bash  shell-script  ls 

9
测试是否设置了多个变量
我想确保在脚本的某个点上,在访问source配置文件后,设置了几个变量,如果没有设置,将停止执行,以告知用户缺少的变量。我试过了 for var in $one $two $three ; do ... 但是,例如$two,如果未设置,则永远不会为执行该循环$two。我接下来尝试的是 for var in one two three ; do if [ -n ${!var} ] ; then echo "$var is set to ${!var}" else echo "$var is not set" fi done 但是,如果没有设置两个,我仍然会得到“两个设置为”而不是“两个未设置”。 如何确保设置了所有必需的变量? 更新/解决方案:我知道“设置”和“设置,但为空”之间存在区别。我现在使用(感谢/programming//a/16753536/3456281和此问题的答案)以下内容: if [ -n "${!var:-}" ] ; then …

8
避免在没有Bash命令的情况下忙于等待bash
我知道我可以在条件变为现实的情况下通过执行以下操作: while true; do test_condition && break sleep 1 done 但是它在每次迭代(休眠)时都会创建1个子流程。我可以这样做来避免它们: while true; do test_condition && break done 但是它占用大量CPU(繁忙等待)。为了避免子流程和繁忙的等待,我想出了以下解决方案,但是我发现它很丑陋: my_tmp_dir=$(mktemp -d --tmpdir=/tmp) # Create a unique tmp dir for the fifo. mkfifo $my_tmp_dir/fifo # Create an empty fifo for sleep by read. exec 3<> $my_tmp_dir/fifo # Open the fifo for …


2
如何测试以查看$ PATH中是否存在应用程序?
我正在尝试编写所有sh启动/环境脚本,以使用尽可能多的DRY和尽可能多的DRY:“可在我将其克隆到的每个* nix上使用”。这意味着确保如果我尝试运行不存在的代码,则代码会正常运行。为此,我需要能够测试程序是否存在。我知道如何测试文件是否存在,但是我不确定如何测试应用程序在路径内是否可执行。我宁愿使用$ PATH,因为其中一些需要在arch,ubuntu和centos上工作。有些可能安装在我的root目录中,没有我的系统上,有些可能没有安装,还有一些我安装在系统路径中。

6
创建文件的Shell脚本(如果不存在)?
我需要创建一个Shell脚本来检查文件是否存在,如果不存在,请创建该文件并继续执行下一个命令,或者仅继续进行下一个命令。我所没有做的。 #!/bin/bash # Check for the file that gets created when the script successfully finishes. if [! -f /Scripts/file.txt] then : # Do nothing. Go to the next step? else mkdir /Scripts # file.txt will come at the end of the script fi # Next command (macOS preference setting) defaults …
19 bash  shell-script  osx 


4
“备份” $ IFS变量是否明智?
我总是很犹豫,$IFS因为它正在破坏全球市场。 但是,这通常使将字符串加载到bash数组中变得简洁明了,而且对于bash脚本而言,简洁性很难实现。 因此,我认为如果尝试将“开始”内容“保存” $IFS到另一个变量,然后在用完$IFS某些东西后立即将其还原,那总比没有好。 这可行吗?还是从本质上讲毫无意义,我应该直接将其设置IFS为后续使用所需的任何内容?

8
调用多个bash脚本并并行运行,而不是依次运行
假设我有三个(或更多)的bash脚本:script1.sh,script2.sh,和script3.sh。我想调用所有这三个脚本并并行运行它们。一种方法是仅执行以下命令: nohup bash script1.sh & nohup bash script2.sh & nohup bash script3.sh & (通常,脚本可能需要几个小时或几天才能完成,所以我想使用nohup它们,以便即使我的控制台关闭也可以继续运行。) 但是,有什么方法可以通过一次调用并行执行这三个命令? 我在想类似 nohup bash script{1..3}.sh & 但这似乎是按顺序执行script1.sh,script2.sh而script3.sh不是并行执行。

6
如何在运行时仅从bash脚本中打印某些命令?
我有一个bash脚本,其中包含基于调用时传递的命令行参数的各种if语句。关于正在运行的命令有某种输出有助于确认所有if语句的流程,但是我当前的解决方案给了我太多信息。 set -v在脚本中使用有助于查看在脚本中运行时打印到屏幕上的命令,但是我得到的命令太多。它几乎就像是脚本的完整副本。 我希望输出显示正在运行的命令,但是我不想看到注释,换行符,if语句中的表达式等。 有没有一种方法可以在打印之前先使-v选项生成的所有可能的输出通过正则表达式?还是其他一些使bash仅输出特定“类型”命令的解决方案(例如,使用可执行文件而不仅仅是bash特定的语句,注释等)? [1] /programming/257616/sudo-changes-path-why在此方面非常有帮助,也是我得到使用建议的地方set -v。 编辑: 与我正在运行的脚本类似(但不完全相同)的脚本: #!/bin/bash #get verbose command output set -v env=$1 if [ "$env" == "dev" ]; then python ascript.py fi if [ "$env" == "prod" ]; then #launching in prod will most likely fail if not run as root. Warn user if …


2
禁止输出,除非退出代码为非零
除非程序以非零代码退出,否则抑制输出(stdout和stderr)的最佳方法是什么?我在想: quiet_success() { file=$(mktemp) if ! "$@" > "$file" 2>&1; then cat "$file" fi rm -f "$file" } 并运行,quiet_success my_long_noisy_script.sh但我不确定是否有更好的方法。我觉得这必须是其他人需要做的事情。 就上下文而言,我希望将其添加到我的cron脚本中,以便如果它们失败了,我会收到一封包含所有内容的电子邮件,如果没有,则不会。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.