Questions tagged «shell»

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

2
if命令在find -exec中
我只是想列出当前目录下的所有目录和文件,并使用以下命令写出它们是文件还是目录: find -exec echo `echo {} : ;if [ -f {} ]; then echo file; else echo directory;fi` \; 我知道这是一个愚蠢的命令,我可以使用诸如-type f或的其他方式-type d,但是我想了解为什么这段代码无法按预期工作。它只是将目录打印到所有这些文件。例如,当输出find为时: . ./dir ./dir/file 我的代码输出是: . : directory ./dir : directory ./dir/file : directory 和输出 echo `echo dir/file : ;if [ -f dir/file ]; then echo file; else echo …

4
在传递到另一个命令之前完全缓冲命令输出?
有没有一种方法可以在没有临时文件的情况下只执行另一个命令?我有一个运行时间更长的命令,另一个具有格式化输出并使用curl将其发送到HTTP服务器的命令。如果我只是执行commandA | commandB,commandB将启动curl,连接到服务器并开始发送数据。因为commandA花费了很长时间,所以HTTP服务器将超时。我可以做我想做的事commandA > /tmp/file && commandB </tmp/file && rm -f /tmp/file 出于好奇,我想知道是否有没有临时文件的方法。我尝试过,mbuffer -m 20M -q -P 100但是卷曲过程仍然在一开始就开始了。Mbuffer一直等到commandA实际发送数据完成为止。(数据本身最大只有几百kb)
10 shell  pipe  buffer 

2
在Ctrl + C上,终止当前命令,但继续执行脚本
我有一个bash脚本,其中我执行一行,休眠一段时间,然后在tail -f日志文件中验证是否可以看到某种模式,按ctrl + c退出,tail -f然后移至下一行直到bash脚本完成执行: 到目前为止,这是我所做的: #!/bin/bash # capture the hostname host_name=`hostname -f` # method that runs tail -f on log_file.log and looks for pattern and passes control to next line on 'ctrl+c' echo "===================================================" echo "On $host_name: running some command" some command here echo "On $host_name: sleeping for 5s" …
10 bash  shell  signals  trap 



1
Bash保存后会自动将更新重新加载(注入)到正在运行的脚本中:为什么?有实际用途吗?
我正在编写bash脚本,并且在脚本等待while循环中的某些输入时碰巧更新了代码(将脚本文件保存到磁盘)。回到终端并继续执行脚本的先前操作后,bash给出了有关文件语法的错误: /home/aularon/bin/script: line 58: unexpected EOF while looking for matching `"' /home/aularon/bin/script: line 67: syntax error: unexpected end of file 因此,我尝试执行以下操作: 第一个:创建脚本,self-update.sh我们称它为: #!/bin/bash fname=$(mktemp) cat $0 | sed 's/BEFORE\./AFTER!./' > $fname cp $fname $0 rm -f $fname echo 'String: BEFORE.'; 脚本所做的是读取其代码,将单词“之前”更改为“之后”,然后使用新代码重新编写自身。 第二次运行: chmod +x self-update.sh ./self-update.sh 第三奇迹 aularon@aularon-laptop:~$ ./self-update.sh String: …
10 bash  shell  scripting 

1
ZSH:`.`和`source`有什么区别?
我以前认为内置.和source是等效的。这个问题在谈到我时是同意的bash。但是我遇到以下使用zsh: desktop➜ ~/pst . env /usr/bin/env:1: no such file or directory: ^@^A^@^@^@X^Z@^@^@^@^@^@@^@^@^@^@^@^@^@\M-8q^@^@^@^@^@^@^@^@^@^@@^@8^@ /usr/bin/env:2: parse error near `)' desktop➜ ~/pst source env desktop➜ ~/pst file env env: ASCII text source达到了我的预期,但是.正在尝试做什么?
10 shell  zsh 


2
为什么返回-1时出现255错误255
我是C ++编程的新手,我有一个非常基本的问题。我注意到,当我返回-1C ++程序然后检查退出状态时,我得到了255。这是为什么? 该代码是最基本的: int main() { return -1; } 然后,在运行编译的代码之后: echo $? 255
10 shell  exit 

1
如何在带有条的命令行中为多个变量分配值
我本质上是在尝试将shell命令的输出的某些部分分配给多个变量,但是我不知道该怎么做。 为了简单起见,假设执行时在shell上的命令可以打印 one two three four 可以用 echo "one two three four" (尽管实际的建议不同) 现在,我想将输出的第二个和第四个单词(在本例中为两个和四个)分配给变量w1和w2。 我以为我可以像这样使用read命令: echo "one two three four" | awk '{print $2 " " $4}' | read w1 w2 但这不起作用,可能是因为read命令是在子进程中执行的。 那么,我将如何实现自己的追求?
10 shell  bash 


2
强制SSH在shell中(而不是在窗口中)询问我的私钥密码
引导后第一次使用SSH时,它会要求我提供私钥解锁密码(这是我期望的行为)。但这是在窗口而不是外壳中进行的(类似于gksudoVS sudo)。这令人沮丧(我必须使用鼠标单击窗口),其次有时会导致错误(我使用Guake终端,有时是全屏显示,在这种情况下,我无法专注于SSH窗口,因此我不得不重新启动X )。 所以,我的问题是:是否有一种方法可以强制SSH在命令行上要求我的私钥密码,而不是弹出一个窗口?

4
循环性能与扩展性能
需要以下比较的专家建议: 使用循环的代码段: for file in `cat large_file_list` do gzip -d $file done 使用简单扩展的代码段: gzip -d `cat large_file_list` 哪一个会更快?必须操纵大数据集。

1
为什么与以破折号开头的CLI参数一起使用时,代字号(〜)不会展开?
我花了几个小时试图运行VNC服务器(x0vncserver),并且客户端拒绝连接并发出奇怪的消息, No password configured for VNC Auth 服务器还会打印此错误 SVncAuth: opening password file '~/.vnc/passwd' failed 好的,我浪费了很多时间,直到意识到波浪号既没有被shell扩展,也没有被x0vncserver扩展。然后我进行了这些测试 $ echo --PasswordFile=~/.vnc/passwd --PasswordFile=~/.vnc/passwd 但 $ echo PasswordFile=~/.vnc/passwd PasswordFile=/home/tichomir/.vnc/passwd 这是为什么?如果参数以短划线开头,为什么shell拒绝扩展代字号?我认为只要不加引号,波浪号就会一直扩展,但是显然还有另外一条规则在起作用吗?
9 bash  shell  tilde 


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.