Questions tagged «shell»

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

3
如何将U + xxxxx代码指定的表情转换为utf-8?
表情符号似乎是使用U + xxxxx的格式指定的, 其中每个x是一个十六进制数字。 例如,U + 1F615是“困惑的面孔” 的正式Unicode联盟代码code 由于我经常感到困惑,所以我对这个符号有很强的亲和力。 该U + 1F615表示是混淆我,因为我认为有可能为Unicode字符的唯一编码所需的8,16,24或32位,而5个十六进制数字需要5×4 = 20比特。 我发现这个符号似乎由bash中完全不同的十六进制字符串表示: $echo -n 😕 | hexdump 0000000 f0 9f 98 95 0000004 $echo -e "\xf0\x9f\x98\x95" 😕 $PS1=$'\xf0\x9f\x98\x95 >' 😕 > 我本来希望U + 1F615转换为\ x00 \ x01 \ xF6 \ x15之类的东西。 我看不到这两种编码之间的关系吗? 当我在正式的Unicode联盟列表中查找符号时,我希望能够直接使用该代码,而不必以这种乏味的方式手动将其转换。即 在某些网页上找到符号 将其复制到Web浏览器的剪贴板 将其粘贴到bash中以通过十六进制转储进行回显以发现REAL代码。 我可以使用此20位代码来确定32位代码是什么吗? …

2
为什么在bash管道上使用`yes'不会*导致无限循环?
根据其文档,bash会一直等到管道中的所有命令运行完毕,然后再继续 在返回值之前,shell等待管道中的所有命令终止。 那么,为什么命令yes | true立即完成?不应yes永远循环并导致管道永不返回吗? 还有一个子问题:根据POSIX规范,shell管道可以选择在最后一条命令完成之后返回,或者等待直到所有命令完成。从这个意义上说,普通的壳有不同的行为吗?是否有任何壳yes | true会永远循环?
16 bash  shell  pipe 

1
当我键入scp命令时,可以制表符补全远程文件的神奇之处是什么?
大概这是我在oh-my-zsh设置中启用的某些插件提供的功能(我已经使用zsh多年了)。 自从我将公钥添加到服务器(现在我无需输入密码就可以SSH到服务器)以来,我就注意到了,当我scp在shell中编写命令时,我实际上可以制表完整的远程文件路径! 例如 $ diff <(scp Remoteuser@remote.domain.net:/var/www/html/ 我点击选项卡,它就可以了!(至于我要使用命令本身来完成的工作,我将使用scp“复制”到stdout,并将其作为文件添加到差异文件中。这样,我可以看到我之前部署到服务器的确切更改正在运行rsync) 我很好奇是什么使这项工作如此出色。它是与z shell集成的scp中内置的东西吗?或者是其他东西?

3
有什么理由使用或教导“…”替代新的开发?
据我了解,由于较容易且不易出错的嵌套和转义语法,更现代的$(...)命令替换语法比`基于旧的语法更可取。 此外,/bin/sh现代使用的大多数样式的shell 似乎都支持$(…): 重击 灰(因此是BusyBox,因此是大多数嵌入式Linux) 短跑 FreeBSD / bin / sh 而$(…)由IEEE 1003.1规定。 所以我有两个非常相关的问题: 除非您知道该脚本需要在特定的旧系统上运行,否则是否有理由在新的Shell脚本开发中使用`? 是否有任何理由不教UNIX编程专业的学生仅仅编写$(...)和讨论,而只是讨论`他们在阅读其他开发人员的shell脚本时可能会遇到的过时变体(如果使用的是真正的旧系统或非标准系统,则可能需要这样做)因为某些原因)?

6
Shell:“显示所有2588种可能性吗?”
因此,我在四处移动笔记本电脑(并且习惯于在键盘上进行设置...),然后醒来发现了这一点: $ 显示所有2588的可能性?(是或否) 什么命令将显示类似这样的内容? 我正在使用Bash。
16 bash  shell 

1
$ PATH环境变量中的百分比
我的$ PATH看起来像这样: /home/torbjorr/deployed/vector/x86_64-GNU%2fLinux:/home/torbjorr/deployed/typewriter/x86_64-GNU%2fLinux:/home/torbjorr/deployed/mustudio/x86_64-GNU%2fLinux:/home/torbjorr/deployed/mathext/x86_64-GNU%2fLinux:/home/torbjorr/deployed/doxymax/x86_64-GNU%2fLinux:/home/torbjorr/deployed/c2tex/x86_64-GNU%2fLinux:/home/torbjorr/deployed/x86_64-GNU%2fLinux/wand:/home/torbjorr/deployed/x86_64-GNU%2fLinux/spellesc:/home/torbjorr/deployed/x86_64-GNU%2fLinux/projinit:/home/torbjorr/deployed/x86_64-GNU%2fLinux/herbs:/home/torbjorr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games 在bash中,我可以毫无问题地调用位于 /home/torbjorr/deployed/x86_64-GNU%2fLinux/wand 喜欢 $ wand (i) Mål från "main.cpp" har registrerats (i) Skapar katalog "__wand_targets_dbg" (i) Kör g++ "main.cpp" -fpic -L"/home/torbjorr/deployed" -g -Wall -std=c++11 -I"/home/torbjorr/deployed" -o "__wand_targets_dbg/cb-template 但是,在bourne shell兼容模式下,找不到魔杖: $ wand sh: 2: wand: not found 看来问题出在这些路径中的%符号。该符号已通过URL编码添加,因此即使名称不是有效的文件名,也可以在目录名称中使用名称“ GNU / Linux”。是否可以在sh中使用该名称,或者使sh命令作为bash使用。也就是说,即使使用/ bin / sh命令调用了bash,make bash的行为也一样,该命令还是链接到bash。
16 shell  path  dash  ash 

2
bash中set -k选项的实际用法
我们什么时候set -k在bash中使用option? Bash参考手册说, 所有赋值语句形式的参数都放置在命令环境中,而不仅仅是命令名称之前的参数。 我了解该选项的作用,但是无法想象我们何时需要它。
16 bash  shell 

5
使用生成的文件名列表作为参数列表-带空格
我正在尝试使用收集的文件名列表调用脚本find。没什么特别的,只是这样: $ myscript `find . -name something.txt` 问题在于某些路径名包含空格,因此在参数扩展时它们会分解为两个无效的名称。通常,我会在名称两边加上引号,但是在这里,它们会由反引号扩展插入。我试过find用引号过滤每个文件名的输出并用引号引起来,但是当bash看到它们时,剥离它们已经为时已晚,它们被视为文件名的一部分: $ myscript `find . -name something.txt | sed 's/.*/"&"/'` No such file or directory: '"./somedir/something.txt"' 是的,这是处理命令行的规则,但是如何解决呢? 这很尴尬,但我没有提出正确的方法。我终于想出了解决方法,但是xargs -0 -n 10000...我仍然想问这个丑陋的hack:我该如何引用反引号扩展的结果,或者以其他方式实现相同的效果? 编辑:我对xargs 确实将所有参数收集到一个参数列表中的事实感到困惑,除非被告知否则可能会超出系统限制。感谢大家使我挺直!其他人,在阅读已接受的答案时,请记住这一点,因为它不是很直接地指出。 我已经接受了答案,但我的问题仍然存在:是否存在某种方法来保护反引号(或$(...))扩展中的空间?(请注意,可接受的解决方案是非强制性的答案)。

2
未经适当许可无法扩展星号
有人可以向我解释以下内容吗? $ ls -ld /temp/sit/build/ dr-xr-s--- 3 asdf qwer 4096 Jan 31 2012 /temp/sit/build/ $ ls -ld /temp/sit/build/* ls: /temp/sit/build/*: Permission denied 因此,我不能在这里使用星号。我用sudo命令尝试过,但收到“没有这样的文件”错误,而不是“权限被拒绝” ... sudo ls -l /temp/sit/build/* ls: /temp/sit/build/batch*: No such file or directory 但是如果我不使用*,它最终会起作用 sudo ls -l /temp/sit/build/ total 4 dr-xr-s--- 11 asdf qwer 4096 Oct 3 23:31 …

2
>>重定向是什么 做?
什么时候应该>|用于将输出重定向到文件而不是>? 当我看到这时,给出的解释是它可以确保首先截断目标文件。但是我认为>已经暗示了这一点。 是否>|有用?


3
终止后台运行的bash shell脚本
我经常使用bashShell脚本为许多不同的文件运行简单的命令。例如,假设我有以下bash的shell脚本,叫script.sh,运行程序/命令foo三个文本文件"a.txt","b.txt","c.txt": #!/bin/bash for strname in "a" "b" "c" do foo $strname".txt" done 另外,假设foo $strname".txt"速度很慢,那么脚本的执行将花费很长时间(例如,数小时或数天)。nohup因此,即使终端处于关闭或断开状态,我也要使用继续执行。我还希望脚本立即转到后台,因此我将使用&运算符。因此,我将使用以下命令来调用script.sh: nohup bash script.sh & 这对于在后台运行脚本且没有挂断效果很好,但是现在假设我出于某种原因希望在某个时候终止执行。我怎样才能做到这一点? 我遇到的问题是,通过查看top,我只能看到与foo相对应的"a.txt"。我可以终止该foo调用,但是要调用的foo对应对象,然后也必须终止该调用,"b.txt"依此类推。对于for循环中指定的数十或数百个文本文件foo,一个接一个地终止是很痛苦的!因此,我需要以某种方式终止shell脚本本身,而不是终止从shell脚本发出的特定调用。 当我键入命令 ps -u myusername myusername我的用户名在哪里,我会得到一个正在运行的进程的列表。但是我看到了两个不同的进程ID bash。我如何知道这些过程中的哪一个(如果有的话)与我的原始呼叫相对应nohup bash script.sh &?

2
并行执行管道命令
请考虑以下情形。我有两个程序A和B。程序A输出到字符串的stdout行,而程序B处理来自stdin的行。当然,使用这两个程序的方法是: foo @ bar:〜$ A | 乙 现在,我注意到这只占用了一个核心。因此,我想知道: 程序A和B是否共享相同的计算资源?如果是这样,是否可以同时运行A和B? 我注意到的另一件事是A的运行速度比B快得多,因此我想知道是否可以以某种方式运行更多的B程序并让它们并行处理A输出的行。 也就是说,A将输出其行,并且将有N个程序B实例读取这些行(无论谁先读取它们)来处理它们并在stdout上输出它们。 所以我的最后一个问题是: 有没有一种方法可以将输出传送到多个B进程中的A,而不必考虑竞争条件和其他可能引起的不一致?


4
如何向shell发送许多命令并等待命令结束
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加详细信息并通过编辑此帖子来澄清问题。 2年前关闭。 我大约有20条命令,我必须将所有这些命令发送到Unix Shell并复制结果,但是我不知道该怎么做。 我不确定我拥有什么外壳,因为它是一个连接到移动网络管理的小程序,并且通过这个小程序,我们可以按行发送命令并通过尖叫获得结果,因此,我无法使用脚本发送命令。 命令1-与服务器连接。 等待命令1完成 命令2-更新服务器1中的所有信息完成 等待。 指令3。获取一些参数。 ...以及更多此类命令。 我试着用cmd1 | cmd2 | cmd3 和 cmd1 & cmd2 & cmd3和cmd1;cmd2 问题在于将cmd1其连接到RNC(网络元素)并花费15秒钟,之后cmd2才有意义。但只为第一个cmd工作。任何线索,如何运行?

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.