Questions tagged «shell»

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

4
字母的ASCII艺术,字母使用自己的字符
如果我执行 banner ABC 我得到: # ###### ##### # # # # # # # # # # # # # ###### # ####### # # # # # # # # # # # ###### ##### 另一个程序figlet拥有更精致的字体和用于连接相邻字符的机制,例如: _ ____ ____ / \ | __ ) / ___| / _ \ …

2
在Linux中使用print命令代替echo
我只是可以使用linux echo命令在终端中打印一条消息。 prayag@prayag$ echo "prayag works on JVM" prayag works on JVM 我可以使用print命令获得相同的输出。 我实际上浏览了他们的手册,在其中$ man print将其描述为Run-mailcap-programs,这是我以前从未听说过的术语。并且了解到它是用于基于MIME查找用于打开文件的正确程序的。 那么,有没有办法单独使用而不是打印简单的线条?printecho 在Need需要在bash脚本中将文本文件的内容分配给变量时发现了类似的问题,但有人echo在print那儿提出建议。 我尝试跟随,但遇到了问题。 $ print --"text/plain" "prayag works on JVM" Warning: unknown mime-type for "prayag works on JVM" -- using "application/octet-stream" Error: no such file "prayag works on JVM" 它要求提供包含文件的文件。 $ print --"text/plain" application.properties …
7 shell  command  echo 

4
问题理解.sh文件中的'hash'命令
所以我想在Linux机器上安装Etherpad lite。如果我尝试运行它,则会收到错误消息: “请安装node.js(http://nodejs.org)” 该命令which node为我提供了通往节点js的正确路径。因此,我进入了Etherpad Lite的.sh文件,发现了这一点: #Is node installed? hash node > /dev/null 2>&1 || { echo "Please install node.js ( http://nodejs.org )" >&2 exit 1 } 我想这意味着:检查节点->如果没有可用的打印行并退出。但是这段代码到底是做什么的?哈希做什么?所有这些&和>什么? 谁能向我解释这三行内容,我们将不胜感激?

3
在外壳上对列表执行操作
我有要卸载的软件包列表。卸载程序pkg_deinstall不会将软件包列表作为要卸载的参数。我如何从列表中卸载(如foreach循环)? [root@fbsd01 /usr/ports/editors/vim]# pkg_info | grep proto| sed 's/\([a-z0-9]*\).*/\1/' bigreqsproto compositeproto damageproto fixesproto fontsproto inputproto kbproto randrproto renderproto xcb xcmiscproto xextproto xf86bigfontproto xineramaproto 我认为类似的命令会起作用,但是我必须将列表作为参数而不是流传递: pkg_info | grep proto| sed 's/\([a-z0-9]*\).*/\1/' | head -n 1 pkg_deinstall 如果您可以给我一些有关使用哪种程序和语法的线索,那将很有帮助。我知道,由于它是独一无二的,您可能很难找到确切的答案。如果我的问题太复杂,也许有人可以告诉我如何对ls目录中的文件执行操作。
3 bash  shell  freebsd 

2
同一用户的多个虚拟配置文件
很多时候,一个用户使用多个“身份”:工作,开源,学术界等,所有这些都需要不同的ssh密钥,编辑器配置,git config等。 我想知道是否有任何工具可以在具有相同UNIX用户的“虚拟配置文件”之间进行切换。最好可以使您也具有不同的默认二进制文件/库(例如,在一个配置文件中,“ python”将运行python2.7,而在另一个配置文件中将运行python3)。 我知道可以使用环境变量,别名和链接文件的组合来设置它,但是我想知道是否有更干净的选择,例如python提供的virtualenv。

1
不要等到返回Shell重定向
我想将脚本(Python或任何其他类型)的输出重定向到文件。易于使用>或>>。 但是使用这两个输出似乎仅在脚本返回后才写入文件中。从标准输出重定向后,是否可以将输出立即写入文件中?有点像可以访问以读取脚本最后步骤的日志文件。 提前致谢。

1
根据日期/时间从目录子集中复制文件
我正在教一个班级,其中(〜80)个学生正在提交可以通过webdav访问的作业,该作业由学生组织在由其唯一标识符命名的目录中。 这些学生分为两组,分别在一周的不同日期提交作业。我想创建一个bash脚本,以将每个学生子集的文件自动下载到本地目录中。 我不知道该怎么办的是以下内容: 通过名称选择文件夹的特定子集以从中复制文件。 根据评论进行编辑:我连接的webdav服务器有80个由学生命名的目录,这80个目录由两组学生组成。 我想从每个组的目录中选择文件,即Group1包含目录StudentA/ StudentC/ StudentD/。第2组将包含目录StudentB/ StudentE/ StudentF/。 指定要复制的文件的开始日期/时间。结束日期/时间对我很有用,因为我扣除了以后的作业。 在这些方面的任何帮助将不胜感激。

1
尝试通过<()在vim中编辑时文件不再可用
当与水手一起工作时,我经常做诸如 vim &lt;(hg cat -r 42 somefile) 但是,如果我用大于几百行的文件尝试此操作,则会在vim中收到读取错误,并且仅包括前几百行。如果我使用gvim而不是vim,则会出现如下错误 E211: FIle "/proc/3546/fd/63" no longer available 这不行吗?我不知道它是否相关,但是我在bash和zsh中都尝试过,结果相同,而且我也尝试过 cat &lt;(hg cat -r 42 somefile) 如我所料,它将打印整个文件。
2 shell  vim 

4
所有子流程均为Bash(!),
我尝试使用GDB,发现无论何时尝试生成我正在调试的程序,都会生成Bash(GDB会说starting myProg...,然后Bash出现。当我杀死Bash时,我会回到GDB中,会告诉我Bash的退出状态)。最初,我认为这是GDB的一个奇怪问题,但是后来我发现,尝试从Vim生成进程也只是生成了Bash。 经过一阵奇怪的启发,我将此问题与我的默认外壳程序是Tcsh联系了起来,并且由于不允许更改它,我只需将我的contains设置.tcshrc为exec bash。当我将其更改为bash或仅使用Tcsh时,问题消失了。 我对Tcsh的问题如何导致我的问题完全不了解。有人可以提供吗? 顺便说一句,我能够通过运行GDB PATH="" /usr/bin/gdb而不是just 获得临时修复gdb。它吐出bash: command not found,然后继续生成我要调试的程序。
1 bash  shell  tcsh  exec 

3
如何在shell中表达换行?
我是debian7.8 bash shell。 str="deb http://ftp.cn.debian.org/debian/ wheezy main contrib non-free \n deb-src http://ftp.cn.debian.org/debian/ wheezy main contrib non-free " echo $str &gt; test 在我的测试文件中是: deb http://ftp.cn.debian.org/debian/ wheezy main contrib non-free \n deb-src http://ftp.cn.debian.org/debian/ wheezy main contrib non-free 我想要的是: deb http://ftp.cn.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.cn.debian.org/debian/ wheezy main contrib non-free 如何正确表达换行符?
1 bash  shell  quoting 

3
查找文件,应用更改以及以不同名称写入另一个目录的简单方法?
我编写了一些脚本foo,该脚本接受文件路径,读取文件,对其进行一些更改,然后将更改后的文件输出到stdout: foo src/file.foo &gt; dest/file.changed.foo # works fine cat src/file.foo | foo &gt; dest/file.changed.foo # also works fine 现在,我想将此命令应用于目录中的多个文件,并对每个文件执行以下操作: src / file.foo-&gt; foo-&gt; dest / file.changed.foo 基于对类似问题的回答,我提出了以下建议: find src -name '*.foo' \ -exec bash -c 'for x; do dest=${x/src/dest}; foo ${x} &gt; ${dest/\.foo$/.changed.foo}; done' _ {} + 上面的方法有效,但是问题在于它对于日常使用来说太复杂了。没有更简单的方法吗?我想知道是否foo是使事情变得复杂的方法。
1 shell  find 

1
解压缩使用^ M创建的目标目录时
我正在尝试使用Shell脚本文件(.sh)解压缩文件夹。它正在解压缩zip文件夹中的文件,但是我创建的目标目录以^ M结尾, 我在.sh文件中使用此命令 unzip /tmp/mram/zip/ApNonProjectExpVO.zip -d /tmp/mram/zip/ 并在腻子中显示日志为 Test.sh Tue Jan 10 23:21:21 CST 2017 Archive: /tmp/mram/zip/ApNonProjectExpVO.zip creating: /tmp/mram/zip/^M/ApNonProjectExpVO/ inflating: /tmp/mram/zip/^M/ApNonProjectExpVO/ApNonProjectExpVO.xml

1
ssh保留环境
我想向客户端服务器发送命令 ssh &lt;client-machine&gt; command 但是,命令是在发送命令的计算机上定义的别名。我也在命令脚本中使用变量,例如: export PORJECT=submariner export location=/under/water export PWD=$PWD 有什么简单的方法可以保存所有内容吗?

1
命令“查找”输出一条错误消息
我想查询运行命令“ find”时收到的错误消息。在以下段落中,我将解释我要完成的工作。 我有一个父文件夹。在此文件夹中,有许多子文件夹。每个子文件夹中都有许多子子文件夹。我想列出包含特定数量文件的子文件夹。我跑循环如下: #!/bin/bash in=PATH_TO_THE_PARENT_FOLDER for i in ${in}/*; do find ${i} -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find {} | wc -l) {}' | sort -n | grep -w 69 | awk '{print $2}' #69 represent the total number of files …
-2 shell  find 
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.