Questions tagged «shell»

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

2
命令行:<<<代替<<
为什么命令md5sum &lt;&lt;&lt; 'ddd' (输出d6d88f2e50080b9602da53dac1102762 -:)正确,md5sum &lt;&lt; 'ddd'而不正确? 什么&lt;&lt;&lt;意思

3
“陷阱……INT TERM EXIT”真的必要吗?
对于许多例子trap使用trap ... INT TERM EXIT的清理任务。但是是否真的有必要列出所有三个sigspec? 该手册说: 如果SIGNAL_SPEC为EXIT(0),则从外壳退出时将执行ARG。 我认为无论脚本正常完成还是由于收到SIGINT或脚本而结束,该脚本都适用SIGTERM。实验还证实了我的信念: $ cat ./trap-exit #!/bin/bash trap 'echo TRAP' EXIT sleep 3 $ ./trap-exit &amp; sleep 1; kill -INT %1 [1] 759 TRAP [1]+ Interrupt ./trap-exit $ ./trap-exit &amp; sleep 1; kill -TERM %1 [1] 773 TRAP [1]+ Terminated ./trap-exit 那为什么这么多例子列出了全部INT TERM EXIT呢?还是我错过了某件事,是否有鞋底EXIT会错过的情况?
63 bash  shell  signals  trap 


5
为什么将SIGINT发送到其父进程时不传播到子进程?
给定一个shell进程(例如sh)及其子进程(例如cat),我如何使用shell的进程ID 模拟Ctrl+ 的行为C? 这是我尝试过的: 运行sh然后cat: [user@host ~]$ sh sh-4.3$ cat test test 从另一个终端发送SIGINT到cat: [user@host ~]$ kill -SIGINT $PID_OF_CAT cat 收到信号并终止(如预期)。 将信号发送到父进程似乎不起作用。为什么将信号cat发送到其父进程时不传播到该信号sh? 这不起作用: [user@host ~]$ kill -SIGINT $PID_OF_SH
62 shell  process  signals 

3
如何下载存档并解压缩而不将存档保存到磁盘?
我想下载并解压缩指定目录下的档案。到目前为止,这是我一直在做的事情: wget http://downloads.mysql.com/source/dbt2-0.37.50.3.tar.gz tar zxf dbt2-0.37.50.3.tar.gz mv dbt2-0.37.50.3 dbt2 我想即时下载并解压缩存档,而无需将其tar.gz写入磁盘。我认为可以通过将的输出wget传递给tar,并给出tar一个目标来实现,但实际上我不知道如何将各个部分放在一起。
62 shell  pipe  tar  wget 

5
无法缩进Heredoc以匹配嵌套的缩进
如果有一个“第一世界问题”来编写脚本,就是这样。 我要更新的脚本中包含以下代码: if [ $diffLines -eq 1 ]; then dateLastChanged=$(stat --format '%y' /.bbdata | awk '{print $1" "$2}' | sed 's/\.[0-9]*//g') mailx -r "Systems and Operations &lt;sysadmin@[redacted].edu&gt;" -s "Warning Stale BB Data" jadavis6@[redacted].edu &lt;&lt;EOI Last Change: $dateLastChanged This is an automated warning of stale data for the UNC-G Blackboard Snapshot …

6
如何检查bash是否可以打印颜色
我想知道是否有任何方法可以检查我的程序是否可以使用颜色输出终端输出。 运行类似命令less并查看使用颜色输出的程序的输出,输出显示错误,例如 [ESC[0;32m0.052ESC[0m ESC[1;32m2,816.00 kbESC[0m] 谢谢
62 shell  terminal  colors 

1
为什么nullglob不是默认值?
在大多数shell nullglob中不是默认值。这意味着,例如,如果您运行此命令 ls * 在一个空目录中,它将把*glob 扩展为一个literal *,而不是一个空的参数列表。有多种方法可以更改该行为,以便*在一个空目录中返回一个空参数列表,这似乎更直观。 那么,是否有nullglob默认原因默认禁用的原因?如果是这样,那是什么原因?
61 shell  wildcards 


1
使用/ bin / sh将stderr和stdout都重定向到/ dev / null
我已经试过各种办法都重定向stdout并stderr以/dev/null没有任何成功。我几乎一生都在奔波,这是我从来没有遇到过的问题,但是在BSD中,我一度陷入困境/bin/sh。 我尝试过的 if ls ./python* 2&gt; /dev/null; then echo found Python fi ...有效 如果没有Python,它将忽略ls的错误消息。但是,如果python.tgz存在的话,将输出如下所示的一行: # ./test.sh ./python-2.7.3p1.tgz 我试过了: if ls ./python* &amp;&gt; /dev/null; then echo found Python fi 和 if ls ./python* 2&gt;1 &gt; /dev/null; then echo found Python fi 和 if ls ./python* &gt; /dev/null; then echo found Python …

1
此命令如何合法?“> file1 <file2 cat”
假设file2已经存在,该命令 &gt; file1 &lt; file2 cat 似乎是复制的内容file2来file1。 但我无法理解这种结构。 我了解“什么都没有”指向file1(创建或删除其内容)。然后将的内容file2定向到file1。 为什么cat之后file2呢?如何知道cat file2操作数的顺序不正确?

2
如何遍历文件行?
说我有这个文件: hello world hello world 这个程序 #!/bin/bash for i in $(cat $1); do echo "tester: $i" done 输出 tester: hello tester: world tester: hello tester: world 我想让for每行的迭代分别忽略空白,即最后两行应替换为 tester: hello world 使用引号会for i in "$(cat $1)";导致i一次分配整个文件。我应该改变什么?

3
Shebang以`//`开头?
我对以下脚本(hello.go)感到困惑。 //usr/bin/env go run $0 $@ ; exit package main import "fmt" func main() { fmt.Printf("hello, world\n") } 它可以执行。(在MacOS X 10.9.5上) $ chmod +x hello.go $ ./hello.go hello, world 我还没有听说过Shebang开头//。当我在脚本顶部插入空白行时,它仍然有效。为什么该脚本有效?


5
如何运行涉及使用sudo重定向或管道传输的命令?
我正在尝试遵循我认为是使用sudo而不是root帐户的最佳实践。 我正在运行一个简单的concat文件操作,例如: sudo echo 'clock_hctosys="YES"' &gt;&gt; /etc/conf.d/hwclock 在以普通用户身份运行的“ &gt;&gt;”右侧,此操作失败。添加额外的sudo也会失败(预期的行为,因为通过管道传递给sudo命令而不是文件)。 例子仅此而已,但已在root帐户下进行了验证和测试。

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.