Questions tagged «exit»

3
在Linux中等待命令使用?
#!/bin/bash function back() { sleep $1 exit $2 } back $1 $2 & b=$! if `wait $!`;then echo success else echo failure fi bash-3.00# ./back 300 0 failure bash-3.00# ./back 300 1 failure success当我发送0时,我原以为退出状态,但是我仍在failure。 另外,wait请勿等待300秒。相反,我立即收到消息。我认为这$!是$$我脚本中的直接子代。是不是 是否可以捕获wait like的退出状态exit_status=$(wait $!)? if ! ((exit_status));then echo sucess else failure fi

6
使用“保留”代码获取shell脚本的退出状态
最近,我从《高级Bash脚本指南》中发现了具有特殊含义的退出代码列表。他们将这些代码称为保留代码,并建议: 根据上表,退出代码1-2、126-165和255具有特殊含义,因此对于用户指定的退出参数应避免使用。 前一段时间,我编写了一个脚本,该脚本使用以下退出状态代码: 0-成功 1-错误的主机名 2-指定了无效的参数 3-用户权限不足 当我编写脚本时,我不知道任何特殊的退出代码,因此我只是从第一个错误条件的1开始,然后为每种连续的错误类型增加了退出状态。 我编写该脚本的目的是,在以后的阶段可以被其他脚本调用(可以检查非零退出代码)。我实际上还没有这样做;到目前为止,我只从交互式外壳程序(Bash)运行脚本,并且我想知道使用自定义退出代码可能导致什么/是否有问题。《高级Bash脚本指南》中的建议的相关性/重要性如何? 我在Bash文档中找不到任何确凿的建议;它的“ 退出状态”部分仅列出了Bash使用的退出代码,但未声明保留其中任何一个或警告您不要将其用于自己的脚本/程序。

4
exit命令如何在Unix终端上工作?
有人可以解释一下该exit命令在Unix终端中如何工作吗? 搜索man exit 并which exit没有帮助,我遇到了以下问题。 在我的新Red Hat系统上安装了Anaconda和PyCharm的附加软件包后,我注意到当我打电话exit退出终端会话时,我会遇到一系列错误,然后终端按预期方式退出。错误似乎表明我对的呼叫exit正在触发rm ~/anaconda3/.../和rm ~/PyCharm/....,从而导致错误。所有目录也似乎是我为这些程序下载的软件包的位置(即numpy),请参见下文。 $ exit rm: cannot remove ‘~/anaconda3/lib/python3.5/site-packages/numpy/core’: Is a directory ... ... 解决 在我的~/.bash_logout档案中,有一行 find ~ -xdev ( -name *~ -o -name .*~ -o -name core ) -exec \rm '{}' \; 注释掉该行可停止错误消息。它似乎可以搜索和删除所有临时文件。但是,它也尝试查找其中包含“核心”一词的目录,并将其删除。这是系统中的预设。


4
捕获SIGINT等时保留出口代码吗?
如果我在退出之前使用trap了http://linuxcommand.org/wss0160.php#trap上所述的捕获ctrl-c(或类似文件)和清理功能,那么我将更改返回的退出代码。 现在,这在现实世界中可能不会有所作为(例如,因为退出代码不是可移植的,而且如进程终止时默认退出代码中所讨论的那样,退出代码并不总是明确的?),但我仍然想知道是否存在真的没有办法防止这种情况,而是返回被中断脚本的默认错误代码吗? 示例(在bash中,但我的问题不应被视为bash特定): #!/bin/bash trap 'echo EXIT;' EXIT read -p 'If you ctrl-c me now my return code will be the default for SIGTERM. ' _ trap 'echo SIGINT; exit 1;' INT read -p 'If you ctrl-c me now my return code will be 1. ' _ 输出: $ ./test.sh …

4
使用流程替换时,如何捕获退出代码/正确处理错误?
我有一个脚本,该脚本使用从SO上的Q&A采取的以下方法将文件名解析为数组: unset ARGS ARGID="1" while IFS= read -r -d $'\0' FILE; do ARGS[ARGID++]="$FILE" done < <(find "$@" -type f -name '*.txt' -print0) 这很好用,可以完美处理所有类型的文件名变体。但是,有时,我会将不存在的文件传递给脚本,例如: $ findscript.sh existingfolder nonexistingfolder find: `nonexistingfile': No such file or directory ... 通常情况下,我会让脚本RET=$?使用类似的代码捕获退出代码,然后使用它来决定如何继续。这似乎不适用于上面的流程替换。 在这种情况下正确的程序是什么?如何捕获返回码?还有其他更合适的方法来确定替换过程中是否出了问题吗?

3
可靠的后台进程返回码
让我们假设以下bash代码: foo > logfile 2>&1 & foo_pid=$! while ps -p$foo_pid do ping -c 1 localhost done wait $foo_pid if [[ $? == 0 ]] then echo "foo success" fi 是否可以安全地假定$?确实包含的返回码foo而不包含的返回码ping?如果该问题的答案是:“您不能假设这一点。” 那么,如何修改这段代码以确保$?始终包含返回代码foo?

4
为什么vfork或fork的子代调用_exit()而不是exit()?
从手册页vfork(): vfork()与fork()的不同之处在于,父级被挂起,直到子级对execve(2)或_exit(2)进行调用。子级与其父级(包括堆栈)共享所有内存,直到子级发出execve()为止。子级不得从当前函数返回或调用exit(),而可以调用_exit()。 为什么孩子应该使用an _exit()而不是简单地打电话exit()?我希望这对vfork()和都适用fork()。
12 c  system-calls  fork  exit 

3
退出bash功能,而不是终端
我有一个bash脚本,如下所示,它可以安装zookeeper,但前提是尚未安装。 ##zookeper installZook(){ ZOOK_VERSION="3.4.5" ZOOK_TOOL="zookeeper-${ZOOK_VERSION}" ZOOK_DOWNLOAD_URL="http://www.us.apache.org/dist/zookeeper/${ZOOK_TOOL}/${ZOOK_TOOL}.tar.gz" if [ -e $DEFAULT_INSTALLATION_DEST/${ZOOK_TOOL} ]; then echo "${ZOOK_TOOL} alreay installed"; exit 1; # <<<< here elif [ ! -e $DEFAULT_SOURCE_ROOT/${ZOOK_TOOL}.tar.gz ]; then wgetIt $ZOOK_DOWNLOAD_URL else echo "[info] : $DEFAULT_SOURCE_ROOT/$ZOOK_TOOL already exists" fi sudo mkdir -p /var/lib/zookeeper sudo mkdir -p /var/log/zookeeper tarIt "$DEFAULT_SOURCE_ROOT/$ZOOK_TOOL.tar.gz" sudo chmod …

2
完成的后台工作状态中的“退出2”是什么?
我有一个练习,将一些数据(某些目录的* conf)放入文件中,并且需要在后台进行。我做到了,我想知道输出消息的含义是什么: [A@localhost tests]$ ls -ld /etc/*conf /usr/*conf > test1_6_conf.txt 2>&1 & 输入升起此行: [1] 2533 这是什么意思?在其他回车之后,出现另一条消息 [A@localhost tests]$ [1]+ Exit 2 ls --color=auto -ld /etc/*conf /usr/*conf > test1_6_conf.txt 2>&1 这是什么意思?什么是“出口2”? 输入检查结果-似乎一切正常。 [A@localhost tests]$ [A@localhost tests]$ ls -l test1_6_conf.txt -rw-rw-r--. 1 A A 2641 Nov 22 14:19 test1_6_conf.txt [A@localhost tests]$ 我正在使用CentOS …

4
使用嵌套循环退出shell脚本
我有一个带有嵌套循环的shell脚本,只是发现“退出”并没有真正退出脚本,而只是退出了当前循环。还有另一种方法可以在某些错误情况下完全退出脚本? 我不想使用“ set -e”,因为存在可接受的错误,并且需要进行大量重写。 现在,我正在使用kill手动终止进程,但是似乎应该有更好的方法来执行此操作。
11 bash  shell  scripting  exit 


2
为什么在创建子进程后立即调用exec()或exit()时使用vfork()?
操作系统概念和APUE说 通过vfork(),父进程被挂起,子进程使用父进程的地址空间。由于vfork()不使用写时复制,因此,如果子进程更改了父级地址空间的任何页面,则父级恢复后更改后的页面将对父级可见。因此,必须谨慎使用vfork(),以确保子进程不会修改父进程的地址空间。 vfork()旨在在子进程创建后立即调用exec()或exit()时使用。 我如何理解最后一句话? 当通过vfork()调用创建的子进程时exec(),是否exec()通过加载新程序来修改父进程的地址空间? 当通过vfork()调用创建子进程时,终止子进程时exit()是否 exit()不修改父进程的地址空间? 我偏爱Linux。 谢谢。
11 linux  process  exec  exit  vfork 


5
捕获退出命令的退出代码
我在bash脚本中有这个: exit 3; exit_code="$?" if [[ "$exit_code" != "0" ]]; then echo -e "${r2g_magenta}Your r2g process is exiting with code $exit_code.${r2g_no_color}"; exit "$exit_code"; fi 看起来它将在退出命令后立即退出,这很有意义。我想知道是否有一些简单的命令可以提供退出代码而无需立即退出? 我当时在猜测: exec exit 3 但它会显示错误消息:exec: exit: not found。我能做什么?:)

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.