Questions tagged «bash»

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

3
PS1 ='$(pwd)'为什么有效,为什么与PS1 = $(pwd)不同
为什么当我输入此命令时,提示会更改为我的目录? PS1='$(pwd)' 我使用的是单引号,也就是说没有插值,也就是echo '$(pwd)'-→$(pwd) 此外,请说我们已经弄清了它为什么有效……为什么它的功能不同于PS1=$(pwd)?(完全没有引号) 通过不同的方式,我的意思是如果我使用引号,那么当我浏览终端时,提示将不断更改为当前目录。但是,如果我不使用引号,那么提示符将始终保留为我首次输入命令时所在的目录PS1=$(pwd) 为什么?
18 bash  zsh  prompt  pwd 

4
符合checkbashisms的方法来确定当前shell
在我的文章中.profile,我使用以下代码来确保仅在登录shell实际上是Bash时才获得与Bash相关的别名和函数: # If the current (login) shell is Bash, then if [ "${BASH_VERSION:-}" ]; then # source ~/.bashrc if it exists. if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi 我目前正在将我的shell配置文件,脚本和函数置于版本控制之下。我也最近开始去除shell脚本不从击的特定功能中受益,如休闲bash化,更换的过程中function funcname()有funcname()。 对于我的shell文件存储库,我已经配置了一个预提交钩子,该存储库中的每个文件都运行checkbashismsDebian的devscripts包中的实用程序,sh以确保我不会无意中引入Bash特定的语法。但是,这给我带来了一个错误.profile: possible bashism in .profile line 51 ($BASH_SOMETHING): if [ "${BASH_VERSION:-}" ]; then 我想知道是否有一种方法可以检查正在运行的shell,而不会触发checkbashisms。 我检查了POSIX列出的与外壳相关的变量的列表,希望它们中的一个可以用来显示当前的外壳。我还查看了在交互式Dash shell中设置的变量,但是,再次找不到合适的候选对象。 目前,我已经排除.profile因被处理checkbashisms; …

3
[[$ {1:0:1}“ ='-']的含义
我有以下脚本来启动MySQL进程: if [ "${1:0:1}" = '-' ]; then set -- mysqld_safe "$@" fi if [ "$1" = 'mysqld_safe' ]; then DATADIR="/var/lib/mysql" ... 1:0:1在这种情况下是什么意思?
18 linux  bash  shell 

2
命令末尾的“&”如何使脚本如此快?
在在线解决CTF挑战时,遇到了需要暴力破解服务器的情况。这是我写的代码: #!/bin/bash for i in {0..9}{0..9}{0..9}{0..9} do echo "Now trying code.." echo $i echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt done 这是令人难以置信的,痛苦的缓慢。我需要尝试从1000到9999的组合,每10次尝试大约需要5秒钟。然后,按照建议,在此行的末尾添加一个“&”: echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt & 并且,它在几秒钟内尝试了数百种组合。我很惊讶。有人可以向我解释逻辑吗?“&”是做什么的?

4
使用#!/ bin / sh或#!/ bin / bash以获得Ubuntu-OSX兼容性以及易用性和POSIX
我知道我可以用作第一行脚本来调用所需的shell。 将#!/bin/sh被推荐,如果所有的UNIX系统的兼容性是一个绝对的要求? 就我而言,我唯一关心的OS是Ubuntu(Debian)和OSX。鉴于此,我是否可以使用#!/bin/bash并确保它在两个系统上都可以工作? 这还会使使用更现代,更清晰的命令语法的脚本更容易使用吗?使用是否#!/bin/sh还与使用POSIX有关?
18 bash  shell  ubuntu  osx  posix 

3
如何列出所有shell变量?
阅读有关此问题的信息:在zsh中如何列出所有环境变量?,我想知道如何列出所有shell变量? 另外,shell变量和环境变量之间的区别是否适用于zsh以外的其他shell? 我主要对Bash和Zsh感兴趣,但是很高兴知道如何在其他主流Shell中做到这一点。

2
为什么变量在子Shell中可见?
《学习狂书》提到子shell将仅继承环境变量和文件描述符等,并且不会继承未导出的变量: $ var=15 $ (echo $var) 15 $ ./file # this file include the same command echo $var $ 据我所知,shell将为for ()和for 创建两个子shell ./file,但是为什么在()子shell中var虽然没有导出变量却标识了变量,而在./file没有标识的情况下为什么呢? # Strace for () clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f24558b1a10) = 25617 # Strace for ./file clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f24558b1a10) = 25631 我试图用来strace弄清楚这种情况是如何发生的,令人惊讶的是,我发现bash将对克隆系统调用使用相同的参数,因此这意味着分叉的进程()和./file应该具有与父进程相同的进程地址空间,所以为什么在这种()情况下,子外壳可见该变量,而在相同./file情况下基于克隆系统调用,则不会发生这种情况?
18 bash  shell  subshell 

4
替换变量中字符的最短方法
有很多方法可以替换变量中的字符。 tr到目前为止,我发现的最短方法是: OUTPUT=a\'b\"c\`d_123and_a_lot_more OUTPUT=$(echo "$OUTPUT"|tr -d "'\`\"") echo $OUTPUT 有没有更快的方法?而且这是引用安全像引号',"和'本身?
18 bash  string  variable 


2
什么时候编写可移植脚本很重要?
我写的大多数代码都在PHP中。我最近开始学习Shell脚本。我遇到的大多数资源和教程都是针对Bash的。有些警告关于洗礼,有些则没有。我在这里和Stack Overflow上已经读了很多东西。 每当答案使用Bashisms时,不可避免地会有人评论说: 您不应该使用<在此处插入bashism>。它不是便携式的。 即使将问题标记为,也会发生这种情况bash。对我来说,这就像告诉一个PHP程序员,他们不应该使用PHP 5中的新代码,因为它不能与PHP 4一起使用。或者告诉某人,他们不应该为Mac写一些东西,因为它不能被使用。在Windows上。 当我用PHP编写时,我选择了最低要求,并编写了向前兼容的代码。我不担心使其向后兼容。 如果我使用#!/bin/bashshebang,为什么不使用bashisms?我开始得到的印象是有些人就是喜欢bash的 bash化(双关语意)只是为了它的缘故。 人们经常使用bash并且shell可以互换使用-可能是由于bash是许多系统上的默认shell。因此,我可以理解添加注释以警告该代码使用了bashisms,但我不明白使用它们的含义是错误的。 显然,如果我编写的脚本严格仅供个人使用,则可以用我想要的任何语言编写。但我想认为我编写的某些代码可能对其他人有用。 发布前,我尝试过寻找问题的答案。我发现了很多有关如何测试可移植性的信息,但是找不到什么时候进行此操作很重要。 那么,什么时候编写可移植脚本很重要? 例如, 哪种类型的脚本应尽可能地可移植? 没有安装Bash的系统有多普遍? 如果系统已安装Bash,它还会具有GNU版本的find和其他实用程序吗?

2
如何使用管道组成bash函数?
我用这种方式定义的功能很少: function f { read and process $1 ... echo $result } 我想将它们组合在一起,以便调用看起来像f | g | h。 我应该使用哪种惯用法将用于参数的函数转换为从stdin读取参数的函数?是否可以从流中读取成对的参数元组而无需将其转义(例如,空终止)?

8
使用Python解析JSON?
我有一个JSON文件members.json,如下所示。 { "took": 670, "timed_out": false, "_shards": { "total": 8, "successful": 8, "failed": 0 }, "hits": { "total": 74, "max_score": 1, "hits": [ { "_index": "2000_270_0", "_type": "Medical", "_id": "02:17447847049147026174478:174159", "_score": 1, "_source": { "memberId": "0x7b93910446f91928e23e1043dfdf5bcf", "memberFirstName": "Uri", "memberMiddleName": "Prayag", "memberLastName": "Dubofsky" } }, { "_index": "2000_270_0", "_type": "Medical", "_id": …
18 bash  python  json 

2
通过命令行查看dll和exe文件的属性/属性
我需要查看exe和dll文件的一些其他文件属性。 如果打开Windows资源管理器并在视图中添加其他列,则该文件存在时,我会看到诸如公司,版权,产品名称和产品版本之类的信息。 这些数据可通过Windows资源管理器获得,因此可以断定,尽管数据/字符串可能存在于文件本身中的某个位置,但我应该能够在Linux中通过命令行提取该信息。 我尝试使用“字符串”,但获得的成功有限。我知道我无法始终使用“字符串”看到的所有上述数据字段的文件 我希望有人可能有替代解决方案。也许我还没有想到要查看此信息。
18 linux  bash  files 


1
cp:无法统计`/vol/examples/tutorial/science.txt':没有这样的文件或目录
我尝试了一条命令cp /vol/examples/tutorial/science.txt .,但出现错误- cp: cannot stat `/vol/examples/tutorial/science.txt': No such file or directory 我不明白为什么会这样。我转到cygwin主文件夹,并创建了必要的文件夹结构和文本文件。我还检查了文件夹的结构和名称。 另外,我进入~/vol/examples/tutorial然后做cat science.txt,可以阅读文档。那为什么CP命令不起作用?
18 bash  filenames 

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.