空子shell的shell检测
SC1143建议将包装的 shell 命令的注释部分包装在子 shell 中。 Posix shell 是否“足够智能”,在发现子 shell 不执行任何操作时不会启动子 shell? Bash 和 Zsh 怎么样? ...
SC1143建议将包装的 shell 命令的注释部分包装在子 shell 中。 Posix shell 是否“足够智能”,在发现子 shell 不执行任何操作时不会启动子 shell? Bash 和 Zsh 怎么样? ...
主要问题:如何获得declare -F当前 shell 中的值与 shell 刚刚启动时的值之间的增量(下面的前两个命令)。$(declare -F)并没有解决问题,因为子 shell 是 shell 进程的副本。子公司:为什么下面第三个命令没有输出任何内容? $ exec env -i bash $ declare -F declare -f ShowInstallerIsoInfo declare -f __expand_tilde_by_ref declare -f __get_cword_at_cur...
因此,如果我输入如下命令,PID 4920子 shell 就会创建一个子进程 ( )。 linuxprobe@DESKTOP-TP0G72N:~$ (sleep 2;ps -f --forest;sleep 5) UID PID PPID C STIME TTY TIME CMD linuxpr+ 513 512 0 Feb17 pts/0 00:00:00 -bash linuxpr+ 4920 513 0 01:35 pts/0 00:00:00 \_ -bash...
在我的书中(索贝尔的Linux 实用指南, 4e) 文中写道 您可以使用括号控制运算符对命令进行分组。当您使用此技术时,shell 会为每个组创建一个自身的副本,称为子 shell。它将每组命令视为一个列表,并创建一个新进程来执行每个命令...... 我不想错误地解释这一点,所以我想我会在这里问。是否创建子shell一定需要使用这些 () 组命令,还是这只是确保某些命令在同一子销售中运行的一种方法? 也许让我举例问一下。假设我有命令( 中的可执行文件PATH)a和b.在命令提示符下输入以下内容有什么区别吗? a ; b (a ; b) (a) ; ...
这个问题的一个变体已被问过几次(这里和这里,例如),但我担心答案要么没有完全抓住我的问题,要么假设的内容可能比我知道的更多。 我将通过示例提出我的问题,但粗略地说,我想要理解的是(1)如何shell 能够识别可执行文件和脚本,如果能够识别,则 (2) 识别后接下来发生的情况是否存在任何差异。 假设我的工作目录中有一个 shell 脚本script和一个可执行文件(我将“可执行文件”理解为二进制的“机器代码”,但可能并不正确)exe。假设我正在与 bash shell 交互,并且假设scriptbash 和 tcsh 都可以运行它。此外,假设第一行才不是从 S...
我对子外壳中的信号传播感到好奇。我有以下 bash 脚本: #!/bin/bash function test_trap() { echo "hello" } trap 'test_trap' SIGUSR2 (#subshell trap 'test_trap' SIGUSR2 some_command ) other commands 然后我使用 SGE 网格引擎将其提交到网格。问题是,当我取消作业时,SGE 向其发送 SIGUSR2 信号,然后在预先配置的时间后(或者如果脚本不处理该信号或已经处理该信号)发送 SIGKILL。 我的问题是,...
我将 ncdu(NCurses 磁盘使用工具)与 zsh 和 p10k 结合使用。 按“b”会触发当前目录中生成 shell。 如何在屏幕上呈现此信息,以确保稍后重新访问此选项卡时保留之前的心理背景? ...
此 bash 命令的不同步骤按什么顺序完成: (flock -n 9) 9> toto.txt 如果我只做子外壳部分: (flock -n 9) 我得到这个结果:( flock: 9: Mauvais descripteur de fichier错误的文件描述符)。 因此,我假设子 shell 生成首先使用(...) 9> toto.txt.打开文件描述符 9。 但如果我这样做: (ls -l /proc/$$/fd) 9> toto.txt total 0 lrwx------ 1 laurent laurent 64 déc. ...
我有这个: timeout 25 bash -c ' for i in {1..9}; do if read line < "$my_fifo"; then if test "$line" != "0"; then exit 0; fi fi done ' 我真的不喜欢 bash 不能这样做: timeout 25 (...) 我不明白为什么 () 本身不被视为程序。只是一个匿名程序......无论如何...... 我的目标是实现上述目标...
GNU bash,版本 4.3.27 我遇到了一个将输出写入文件的脚本的奇怪问题。脚本 ssh 连接到服务器列表并记录一些服务的状态/子状态。然后我将结果存储在一个数组中。 但是,如果我在控制台窗口运行时输入内容,输入将存储到数组中$result_arr,我不知道为什么 #!/bin/bash check_services() { server_number="$1" local result local result_arr local error_flag="OK" #Get service status result=$(...
我想忽略所有预先存在的环境变量,并只回显一个,如下所示: env -i <( export foo=bar; env ) 这只会打印: foo=bar 然而,构造 env -i <() 尽管我的直觉告诉我它应该是有效的,但它似乎并不有效。如何在此处创建内联程序以供 env -i 执行? ...
我设置了一个 bash 脚本来监视多个 UDP 流并将其转换为可操作的数据。我的问题是我需要将脚本设置为定期检查流捕获是否正在运行,如果没有运行则重新启动它。 挑战在于为每个流捕获创建新的进程名称或 ID,并检查它是否正在运行。 这是我所拥有的内容的淡化版本。我希望有人能告诉我我是否走在正确的道路上: Subscriber () { processName="$1$2$4"; echo "$processName"; pgrep $processName; if [[ $? -ne 0 ]] ; then ec...
cat <(echo yes) 显示“是”。在 Bash 5.2.15 上运行它会sh -m产生同样的结果。 然而在 Bash 4.4.20 上它会抛出一个错误: sh -c "cat <(echo yes)" sh: -c: line 0: syntax error near unexpected token `(' 为什么会出现错误? sh -c除了运行sh然后键入命令之外,还有其他方法吗? ...
我是 Linux shell 的初学者,但我知道这个命令会创建一个子 shell: 子 shell 通常是使用子 shell 运算符或命令(例如括号 ()、反引号 ` 或 $() 语法)创建的。 : ${FOO:=$([ "$BAR" = "baz" ] && echo "true" || echo "false" )} 这可能是一个问题,例如在循环中(这里的情况并非如此)但我喜欢学习如何避免它。一般来说,在上面的作业中,可以使用以下内容来避免子shell吗? if [ -z "$FOO" ]; then if [ "$BAR" =...
我在 stackexchange 上发现了类似的问题,但距离我的案例还不够近,无法提供帮助。 我正在尝试创建一个脚本并将其绑定到一个键,这样当按下时,它会显示“ titleby artist”,或者,如果没有艺术家/标题,它会显示“ filename”。 Cmus(我选择的音乐播放器)cmus-remote与-C(原始)选项配对,让我可以查询 cmus 播放器的任何内容并获得换行符分隔的响应,例如: cmus-remote -C 'format_print %a %t %F' Beach House Space Song /home/user/Music/B...