Questions tagged «shell»

Shell是Unix的命令行界面。您可以交互地在外壳程序中键入命令,也可以编写脚本来自动执行任务。使用此标记可解决适用于/ bin / sh和大多数兼容shell(ash,bash,ksh,zsh等)的问题。对于有错误的Shell脚本,请在此处发布之前在http://shellcheck.net中对其进行检查。

3
shell:在命令替换中保留尾随换行符('\ n')
我希望能够捕获命令替换的确切输出,包括结尾的换行符。 我意识到默认情况下会删除它们,因此可能需要进行一些操作才能保留它们,并且我想保留原始的退出代码。 例如,给定一个带有可变数量的尾随换行符和退出代码的命令: f(){ for i in $(seq "$((RANDOM % 3))"); do echo; done; return $((RANDOM % 256));} export -f f 我想运行类似: exact_output f 并具有以下输出: Output: $'\n\n' Exit: 5 我对bashPOSIX和POSIX 都感兴趣sh。
14 bash  shell 

3
陷阱是由subshel​​l继承的吗?
我尝试了以下脚本: #!/bin/bash trap 'echo "touching a file" && touch $FILE' EXIT foo1(){ echo "foo1" } foo(){ echo "foo" export FILE=${FILE:-/tmp/file1} } (foo1) foo 上面脚本的输出是: [root@usr1 my_tests]# ./test.sh foo1 foo touching a file 但是,我也希望在退出时也要调用trap foo1,这是在子shell中调用的。 这是预期的吗? 是trap由subshel​​l继承的吗? 如果是,那么trap子外壳程序在什么情况下会继承?
14 shell  trap  subshell 

3
在最后一个定界符上剪切字符串
我有一个类似的文件名a.b.c.txt,我希望将此字符串拆分为 string1=a.b.c string2=txt 基本上我想分割文件名及其扩展名。我用过,cut但它分裂为a,b,c和txt。我想剪切最后一个定界符上的字符串。 有人可以帮忙吗?
14 shell  cut 

2
将特定模式的文件移动到另一个目录
在目录中,/home/in我有如下文件: crust.MC12345.txt crust.etcMC12345.txt crust.MC23456.txt crust.etcMC23456.txt crust.etctcMC23456.txt 我只需要移动crust.etcMC12345.txt和crust.etcMC23456.txt到其他目录,/home/out何为我在mv命令使用上述场景模式?
14 shell  wildcards  mv 


3
bash添加了额外的单引号
我在执行脚本时遇到问题。 当以调试模式(bash -x)执行它时,我可以看到bash添加了额外的引号。因此,我的脚本失败了。 这在我的脚本中: testvar="\"sudo /home/pi/shared/blink.sh 27 off\"" ssh -n -q -q -o BatchMode=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ConnectTimeout=5 $1 ${testvar} 这是输出: ssh -n -q -q -o BatchMode=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ConnectTimeout=5 192.168.42.105 '"sudo' /home/pi/shared/blink.sh 27 'off"'
14 shell  ssh  quoting 


4
从标准输出中删除行尾字符?多行成一行
我有一个脚本,输出以下文本。这是Netopia 2210-02 ADSL2调制解调器的输出。 ADSL Line State: Up ADSL Startup Attempts: 1 ADSL Modulation: DMT ADSL Data Path: Fast Datapump Version: DSP 7.2.3.0, HAL 7.2.1.0 SNR Margin: 8.20 9.00 dB Line Attenuation: 57.50 31.00 dB Output Power: 17.09 12.34 dBm Errored Seconds: 0 0 Loss of Signal: 0 476 Loss of …

2
在bash中启动可执行文件的顺序
如果我test在bash中执行命令,test(评估条件表达式)内置实用程序将启动: $ type test test is a shell builtin $ type -a test test is a shell builtin test is /usr/local/bin/test test is /usr/bin/test $ 但是,从type -a test上面的输出中可以看到,test/ usr / local / bin目录中有另一个,/ usr / bin目录中又有一个。可执行文件如何排序,即始终首选内置命令,然后其余命令取决于$ PATH变量中的目录顺序?另外,是否可以更改可执行文件的启动顺序,例如,如果键入test,则启动/ usr / bin / test而不是bash-builtin test?

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 …


2
shell中$ @的数据结构是什么?
我们通常$@用来表示除$ 0以外的所有参数。但是,我不知道数据结构$@是什么。 为什么$*在包含双引号时它的行为方式不同,有人可以给我解释级别的解释吗? 可以在for循环中对其进行迭代,因此它似乎是数组。但是,它也可以使用simple完全回显echo $@,如果它是一个数组,则仅显示第一个元素。由于外壳的限制,我无法编写更多的实验代码来执行它。 这篇文章之间的区别:这篇文章展示了$@与$*。但是我想知道的数据类型$@。像Python一样,Shell是一种解释语言,应根据一系列基本类型表示数据。换句话说,我想知道$ @如何存储在计算机内存中。 它是字符串,多行字符串还是数组? 如果它是唯一数据类型,是否可以将自定义变量定义为这种类型的实例?
13 bash  shell 

2
是什么阻止stdout / stderr交错?
假设我运行一些流程: #!/usr/bin/env bash foo & bar & baz & wait; 我像这样运行上面的脚本: foobarbaz | cat 据我所知,当任何进程写入stdout / stderr时,它们的输出都不会交错-stdio的每一行似乎都是原子的。这是如何运作的?哪个实用程序控制每行的原子性?
13 shell  osx  stdout  output  stderr 

3
为什么“ ps ax”找不到没有“#!”的正在运行的bash脚本 标头?
当我运行此脚本时,该脚本将一直运行直到被杀死... # foo.sh while true; do sleep 1; done ...我无法使用来找到它ps ax: >./foo.sh // In a separate shell: >ps ax | grep foo.sh 21110 pts/3 S+ 0:00 grep --color=auto foo.sh ...但是如果我只是将通用的“ #!”标头添加到脚本中... #! /usr/bin/bash # foo.sh while true; do sleep 1; done ...然后该脚本可通过同一ps命令找到... >./foo.sh // In a separate shell: >ps ax …

2
为什么SSH -t不等待后台进程?
为什么ssh -t不等待后台作业完成? 例: ssh user@example 'sleep 2 &' 这可以按预期工作,因为ssh在2秒后返回,而 ssh user@example -t 'sleep 2 &' 不等待sleep完成并立即返回。 谁能解释这背后的原因?有没有办法让ssh -t所有后台进程完成后再返回? 我的用例是使用来启动一个脚本ssh -t,并且该脚本启动了一些后台作业,这些作业应在主脚本完成后仍然存在。随着ssh -t这是不可能的为止。

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.