Questions tagged «bash»

与其他Bourne / POSIX shell相对,GNU的Bourne Again SHell特有的问题。对于一般关于Unix shell的问题,请改用/ shell标记。


3
ssh远程命令行参数如何解析
我已经看到了有关需要对远程ssh命令的参数进行两次转义的问题和解答。我的问题是:第二次解析究竟在何时何地完成? 如果我运行以下命令: $ ssh otherhost pstree -a -p 我在输出中看到以下内容: |-sshd,3736 | `-sshd,1102 | `-sshd,1109 | `-pstree,1112 -a -p 远程命令(pstree)的父进程是sshd,似乎没有任何shell可以解析远程命令的命令行参数,因此似乎没有必要使用双引号或转义(但绝对是)。相反,如果我先在那儿ssh并获得一个登录shell,然后运行,pstree -a -p我会在输出中看到以下内容: ├─sshd,3736 │ └─sshd,3733 │ └─sshd,3735 │ └─bash,3737 │ └─pstree,4130 -a -p 很明显,bash在这种情况下,有一个外壳可以进行命令行解析。但是,在我直接使用远程命令的情况下,似乎没有外壳,那么为什么需要双引号?
11 bash  shell  ssh  process  quoting 

3
当“ / bin / sh”指向“ / bin / bash”时运行shell脚本
我已经在这个问题中阅读以下内容: bash支持--posix开关,这使其更符合POSIX。如果以sh调用,它也会尝试模仿POSIX 。 上面的引用假设这/bin/sh是指向的链接/bin/bash。 但是我不太了解“ sh调用”的含义。 假设我有以下脚本,称为“ script.sh”: #!/bin/bash echo "Hello World" 在以下每种情况下,请告诉我该脚本是在普通bash模式下还是在POSIX模式下运行(假设我已经在运行的终端中执行了以下命令bash): sh script.sh bash script.sh ./script.sh 现在说我有以下脚本,称为“ script.sh”(类似于上面的脚本,但没有shebang): echo "Hello World" 在以下每种情况下,请告诉我该脚本是在普通bash模式下还是在POSIX模式下运行(假设我已经在运行的终端中执行了以下命令bash): sh script2.sh bash script2.sh ./script2.sh
11 linux  bash  shell 


2
%%在函数名称中表示什么?
查看的输出env,我发现还有以下功能。 BASH_FUNC_mc%%=() { . /usr/share/mc/mc-wrapper.sh } /usr/share/mc/mc-wrapper.sh文件的内容如下。 MC_USER=`id | sed 's/[^(]*(//;s/).*//'` MC_PWD_FILE="${TMPDIR-/tmp}/mc-$MC_USER/mc.pwd.$$" /usr/bin/mc -P "$MC_PWD_FILE" "$@" if test -r "$MC_PWD_FILE"; then MC_PWD="`cat "$MC_PWD_FILE"`" if test -n "$MC_PWD" && test -d "$MC_PWD"; then cd "$MC_PWD" fi unset MC_PWD fi rm -f "$MC_PWD_FILE" unset MC_PWD_FILE %%函数名称中的字符是什么意思?它们是否使它成为在特定情况下调用的函数,还是让我以不同于其他函数的方式调用它? 我正在使用带有Bash版本4.3.42(1)-发行版(x86_64-suse-linux-gnu)的openSUSE 42.3,如果有什么不同的话。

3
为什么lib / *源不起作用?
我有一个小程序,其中包含以下文件夹结构: - main.sh - lib/ - clean.sh - get.sh - index.sh - test.sh 每个文件都包含一个我在中使用的函数main.sh。 main.sh: source lib/* get_products clean_products make_index test_index 在上面,前两个功能有效,但后两个功能无效。 但是,如果我替换source lib/*为: source lib/get.sh source lib/clean.sh source lib/index.sh source lib/test.sh 一切正常。 有人知道为什么source lib/*不按预期工作吗?
11 bash  source 

2
重击:按逃逸键4次
当我在bash终端中按4次ESC键时,它显示如下: -bash-4.1$ Display all 2837 possibilities? (y or n) : ! ./ [ [[ ]] { } 411toppm a2p ac accept accton aclocal aclocal-1.11 acpi_listen 此功能是什么?如何找到这些条目?(在第二次ESC键上,终端会发出声音警报。)
11 bash 



4
循环浏览除目录之外的文件
我需要我的脚本对当前目录中的每个文件(不包括任何子目录)执行某些操作。 例如,在当前路径中,有5个文件,但其中1个是文件夹(子目录)。运行所述脚本时,我的脚本应激活作为参数给出的命令。即“ bash脚本wc -w”应提供当前目录中每个文件的字数,但不能提供任何文件夹的字数,因此输出永远不会包含“ / sub / dir:Is a directory”行。 我当前的脚本: #!/bin/bash dir=`pwd` for file in $dir/* do $* $file done 我只需要为循环排除目录,但是我不知道如何。
11 bash  for 

2
bash不能在变量中存储hexvalue 0x00
我正在尝试用dd做一些技巧。我认为可以在名为“ header”的变量中存储一些十六进制值,以将其通过管道传递给dd。 我没有变量的第一步是: $ echo -ne "\x36\xc9\xda\x00\xb4" |dd of=hex $ hd hex 00000000 36 c9 da 00 b4 |6....| 00000005 之后,我尝试了这个: $ header=$(echo -ne "\x36\xc9\xda\x00\xb4") $ echo -n $header | hd 00000000 36 c9 da b4 |6...| 00000004 如您所见,我\x00在$header变量中失去了价值。有人对此行为有解释吗?这真让我抓狂。
11 linux  bash  shell-script  dd 

2
为什么僵尸在等孩子呢?
我正在研究不同的来源,但找不到关于儿童收割的解剖结构的良好描述。这是我想了解的一个简单案例。 $ cat <( sleep 100 & wait ) & [1] 14247 $ ps ax -O pgid | grep $$ 12126 12126 S pts/17 00:00:00 bash 14248 12126 S pts/17 00:00:00 bash 14249 12126 S pts/17 00:00:00 sleep 100 14251 14250 S pts/17 00:00:00 grep --color=auto 12126 $ kill -2 …

1
在旨在交互使用的功能中显示使用注释
我在中定义了许多功能.bashrc,旨在在终端中交互使用。我通常在它们前面加一个描述其预期用途的注释: # Usage: foo [bar] # Foo's a bar into a baz foo() { ... } 如果浏览源代码,这很好,但是最好type在终端中运行以快速提示该功能的作用。但是,这(可以理解)不包含注释: $ type foo foo is a function foo () { ... } 是什么让我想到:“如果这些评论持续存在以便type显示出来,那会不会很好?” 并且本着Python的文档字符串的精神,我想到了这一点: foo() { : Usage: foo [bar] : "Foo's a bar into a baz" ... } $ type foo foo …

2
如何使“本地”捕获退出代码?
在我的项目中,我有以下代码段: local output="$(bash "${1##*/}")" echo "$?" 由于local,这始终显示为零,但是,删除local会导致$?变量正确运行:这是假定从子shell退出代码。 我的问题是:如何在保留退出值的同时保持局部变量不变?


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.