Questions tagged «shell»

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

3
ls命令:第一行是什么意思?
当我这样做时ls -l: calico@A000505:~/Documentos$ ls -l total 2020 -rwxr-xr-x 1 calico calico 8559 2010-11-16 11:12 a.out -rwxrw-rw- 1 smt smt 2050138 2010-10-14 10:40 Java2.pdf -rwxrw-rw- 1 ocv ocv 234 2010-11-16 11:11 test.c 但是“ 2020年总数”是什么意思?我只有3个文件,所以它不是文件或目录的数量,我想也不是文件的大小。那是什么
30 shell  ls 

4
引用ssh $ host $ FOO和ssh $ host“ sudo su user -c $ FOO”类型的构造
我经常最终会通过ssh发出复杂的命令。这些命令涉及管道到awk或perl单行,因此包含单引号和$。我既没有想出正确的报价规则,也没有找到好的参考。例如,考虑以下内容: # what I'd run locally: CMD='pgrep -fl java | grep -i datanode | awk '{print $1}' # this works with ssh $host "$CMD": CMD='pgrep -fl java | grep -i datanode | awk '"'"'{print $1}'"'" (请注意awk语句中的多余引号。) 但是我该如何使用它ssh $host "sudo su user -c '$CMD'"呢?在这种情况下是否有管理报价的一般方法?
30 bash  shell  ssh  quoting 


6
如何使用shell命令仅显示文本文件中的第一列和最后一列?
我需要一些帮助来弄清楚如何使用sed命令仅显示文本文件中的第一列和最后一列。到目前为止,这是我对第1列的了解: cat logfile | sed 's/\|/ /'|awk '{print $1}' 我也想使最后一栏也显示: cat logfile | sed 's/\|/ /'|awk '{print $1}{print $8}' 但是,这需要第一列和最后一列,并将它们合并到一个列表中。有没有办法用sed和awk命令清楚地打印第一列和最后一列? 输入样例: foo|dog|cat|mouse|lion|ox|tiger|bar
30 shell  sed  awk 

3
如果我sudo执行一个Bash脚本文件,那么Bash脚本中的所有命令是否也将作为sudo执行?
我想在Bash中编写一个自动化的安装后脚本(post-install.sh例如,称为)。该脚本将自动添加和更新存储库,安装和更新软件包,编辑配置文件等。 现在,如果执行该脚本(例如使用)sudo post-install.sh,是否仅会提示我输入一次sudo密码,或者sudo每次在脚本中需要sudo权限的命令调用时都需要输入密码?换句话说,可以这么说,bash脚本中的命令是否“继承”了执行权限? 并且,如果确实如此,那么sudo权限是否仍有可能超时(例如,如果特定命令花费的时间足够长以超过sudo超时时间)?还是初始sudo密码输入会持续整个脚本的整个过程?

4
为什么set -e在带括号()后跟OR列表||的子外壳中不起作用?
我最近遇到了一些这样的脚本: ( set -e ; do-stuff; do-more-stuff; ) || echo failed 在我看来,这很好,但是不起作用!将set -e不适用,当你添加的||。没有它,它就可以正常工作: $ ( set -e; false; echo passed; ); echo $? 1 但是,如果添加||,则将set -e被忽略: $ ( set -e; false; echo passed; ) || echo failed passed 使用真实的独立外壳可以按预期工作: $ sh -c 'set -e; false; echo passed;' || echo failed …

6
从子外壳退出外壳脚本
请考虑以下代码段: stop () { echo "${1}" 1>&2 exit 1 } func () { if false; then echo "foo" else stop "something went wrong" fi } 通常,当func被调用时,它将导致脚本终止,这是预期的行为。但是,如果它是在子外壳中执行的,例如 result=`func` 它不会退出脚本。这意味着调用代码必须每次检查函数的退出状态。有办法避免这种情况吗?这set -e是为了什么?

7
我应该使用哪个shell-tcsh vs bash?[关闭]
我已经使用tcsh了很长时间了。但是,每当我搜索某些内容时,我常常会发现指定的方法是bash特定的。甚至Shell脚本的语法对于这两者来说都是不同的。 从我在Internet上搜索和学习的经验来看,bash似乎是最常用的shell。甚至这个网站上标记bash的问题数量也比标记的问题数量多(当前多五倍)tcsh。 因此,我想知道是否应该切换到bash。你怎么看? 我为什么要坚持tcsh或为什么要继续前进bash?
30 linux  shell  bash  fedora  tcsh 

4
如何显示包含子项的终端外壳的进程树?
从命令提示符启动脚本时,外壳程序将为该脚本生成一个子进程。我想以ps树样式输出显示终端级进程与其子级之间的关系。 我怎样才能做到这一点? 到目前为止我尝试过的 文件: script.sh #!/bin/bash ps -f -p$1 然后,我从命令行调用脚本,并传入终端外壳的进程ID: $ ./script.sh $$ 我想要的是这样的 顶层(终端)shell过程 ./script.sh ps命令本身的过程 USER PID [..] ubuntu 123 -bash ubuntu 1234 \_ bash ./script.sh ubuntu 12345 \_ ps auxf 我得到的是: PID TTY STAT TIME COMMAND 14492 pts/24 Ss 0:00 -bash
30 shell  ps 



3
切换到父外壳而不注销
假设我以我的本地帐户开始: avindra@host:~> 然后我切换到root: host:~ # 然后我切换到oracle: [ oracle@host:~] 有没有一种方法可以让我回到root shell(父级),而无需退出oracle shell? 在这种情况下会很方便,因为oracle帐户没有 sudo特权。因此,例如,我在oracle的/ some / really / deeply / nested /目录中,并且设置了各种特殊的环境变量。但是我需要重新进入root才能接触一些系统文件。 当前,我将退出oracle shell以返回到root,运行我的root命令,然后切换回Oracle。给您带来的不便是,我从头开始登录,并且丢失了工作目录和环境。 话虽这么说,有什么办法可以做我要问的吗?
29 shell 

1
为什么某些命令无法使用BASH进程替换?
有时,流程替换将无法按预期进行。这是一个例子: 输入: gcc <(echo 'int main(){return 0;}') 输出: /dev/fd/63: file not recognized: Illegal seek collect2: error: ld returned 1 exit status 输入: 但是,当与其他命令一起使用时,它可以按预期工作: grep main <(echo 'int main(){return 0;}') 输出: int main(){return 0;} 我注意到其他命令也发生了类似的故障(即,期望来自进程替换的文件的命令无法使用/dev/fd/63或类似)。这次故障gcc只是最近一次。我是否应该确定一些通用规则来确定何时进程替换将以这种方式失败并且不应该使用? 我正在Ubuntu 12.04上使用此BASH版本(我也在arch和debian中也看到过): GNU bash,版本4.3.11(1)-release(i686-pc-linux-gnu)



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.