Questions tagged «shell»

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

1
如何将输出重定向到cd?
是否可以将命令的输出重定向到cd?例如,我使用搜索目录,locate并获得了路径。现在,不用写cd路径,我可以将locate输出重定向到cd吗? 我尝试了这个: $ locate Descargas | grep Descargas$ /home/oliver/Descargas $ locate Descargas | grep Descargas$ | cd $ locate Descargas | grep Descargas$ > cd $ locate Descargas | grep Descargas$ < cd /home/oliver/Descargas $ 没有运气。这可能不是特别有用,但我很好奇。

5
如何将`find`的结果作为文件列表传递?
情况是,我有一个MP3播放器mpg321,它接受文件列表作为参数。我将音乐保存在一个名为“ music”的目录中,在该目录中还有更多目录。我只想播放所有这些,所以我用 mpg321 $(find /music -iname "*\.mp3") 。问题是,某些文件名中包含空格,程序将这些文件分成较小的部分,并抱怨缺少文件。包装find引号的结果 mpg321 "$(find /music -iname "*\.mp3")" 这无济于事,因为所有人都会变成一个很大的“文件名”,显然找不到。 那我该怎么做呢?如果那很重要,我正在使用bash,但zsh很快就会切换到。

4
将JSON中的所有数字都用引号引起来
有JSON数据,其中包含一些数值。如何将所有数字转换为字符串?(用引号引起来) 例: { "id":1, "customer":"user", "plate":"BMT-216-A", "country":"GB", "amount":1000, "pndNumber":20000, "zoneNumber":4 } 应该成为 { "id":"1", "customer":"user", "plate":"BMT-216-A", "country":"GB", "amount":"1000", "pndNumber":"20000", "zoneNumber":"4" }
11 shell  json  jq 

1
将括号{}用作命令及其选项的参数的用法
例子 我最近发现了一些示例,这些示例使用成对的封闭括号{}作为命令甚至其选项的参数,而在括号之间没有任何东西: cat foo | xargs -I{} echo {} find . -size 0 -exec rm -i {} \; 没有文件 我的问题是我无法在GNU Bash手册中找到描述上述情况{}下用法的文档。 我不认为这是参数扩展,因为在参数扩展中必须在括起来的花括号之前加一个美元符号,例如${}。 它也不是大括号扩展名,因为它采用的形式{x..y[..incr]},其中x和y不是可选的。 它也不能作为命令分组,因为{}它用作参数。 问题 {}一般而言,一对封闭的括号作为接受它的任何命令的参数甚至意味着什么? 在哪里可以找到描述{}as参数用法的文档?
11 bash  shell 

2
posix shell:打印环境变量名称列表(无值)
以与多种实现兼容的posix兼容方式,如何打印当前定义的环境变量列表而不包含它们的值? 在某些实现(mksh,freebsd / bin / sh)上,只需单独使用即可export: $ export FOO2 FOO 但是对于其他一些实现(bash,zsh,破折号),export也会显示该值。例如,使用bash: $ export export FOO2='as df\ asdk=fja:\ asd=fa\ asdf' export FOO='sjfkasjfd kjasdf:\ asdkj=fkajdsf:\ :askjfkajsf=asdfkj:\ safdkj' $ printenv | sed -n l FOO2=as\tdf\$ asdk=fja:\$ asd=fa\$ asdf$ FOO=sjfkasjfd kjasdf:\$ asdkj=fkajdsf:\$ \t:askjfkajsf=asdfkj:\$ safdkj$ 其他选项(例如,env或printenv没有选项)仅显示不带值的变量名,至少在我尝试过的linux和freebsd平台上不行。 管道到awk / sed / etc。或使用参数扩展技术(例如${foo%%=*})修剪列表是可以接受的,但是它必须使用可能跨越行且值中带有=空格的值(请参见上面的示例)。 特定于特定Shell实现的答案很有趣,但是我主要是在寻找在各个实现之间都兼容的东西。


1
将文本格式化为列
我有一个两列的文件,如下所示(示例): 文件1: John 1 Peter 2 Michael Rod 3 Su 7 Louise 9 我需要格式化它,我的预期输出应该是: 文件1: John 1 Peter 2 Michael Rod 3 Su 7 Louise 9

2
Shell脚本来源的文件扩展名的官方标准/约定
我想知道是否要为要而不是运行的shell脚本提供文件类型扩展名的约定。例如: 如果我想在子shell中运行此脚本。 ./script.sh 如果我想记住从当前shell运行此脚本。 . script.source 在第二个示例中,文件类型是否有约定(例如POSIX)?像.source还是.sourceme? 更新资料 这个问题不问任何意见。我明确指出,我想知道这种脚本是否存在标准化文件扩展名。与在类似问题上广为接受的问题(对于bash脚本使用.sh或.bash扩展名?)相比,该问题甚至更少基于观点。

3
是否可以在不使用子Shell的情况下执行Shell命令替换?
我有一种情况,要求不使用子shell进行命令替换。我有这样的构造: pushd $(mktemp -d) 现在,我要一次性退出并删除临时目录: rmdir $(popd) 但是,这不起作用,因为popd它不返回弹出的目录(它返回新的目录,现在返回当前目录),并且还因为它是在子shell中执行的。 就像是 dirs -l -1 ; popd &> /dev/null 将返回弹出的目录,但不能这样使用: rmdir $(dirs -l -1 ; popd &> /dev/null) 因为popd只会影响子外壳。所需要的是做到这一点的能力: rmdir { dirs -l -1 ; popd &> /dev/null; } 但这是无效的语法。有可能达到这种效果吗? (注意:我知道我可以将临时目录保存在变量中;我试图避免这样做,并在此过程中学习新知识!)
11 shell  directory 

1
在zsh中列出别名,函数和变量的名称
我需要一种方法来列出zsh中别名,函数,变量,数组的名称(不包括主体/内容/值)。最佳情况下,其行为应类似于compgen: compgen -a # will list all the aliases you could run. compgen -A function # will list all the functions you could run. compgen -A variable # will list all the variables defined. 背景 我需要这个来开发env_parallel.zsh:https ://www.gnu.org/software/parallel/env_parallel.html
11 shell  zsh 

3
Unix是否等效于Windows环境变量PATHEXT
我想知道Windows环境变量是否具有Unix等效项PATHEXT。 对于没有Windows背景的用户:添加文件后缀可以PATHEXT使我执行脚本,而无需在cmd.exe中键入该后缀。例如,在我的Windows计算机上,PATHEXT包含后缀,.pl并且当我想在cmd.exe中执行Perl脚本时,我只需键入my-script就可以执行它。但是,为了在bash中执行相同的脚本,我需要写全名:my-script.pl。 由于我目前同时在Windows和Unix上工作,因此我几乎总是陷入再次进入Unix框时忘记键入后缀的陷阱。

2
捕获&&链接的命令的输出/重定向
我有一系列与&&链接在一起的命令a,b,c a && b && c。 我想捕获所有到stdout和stderr的命令的输出。 a && b && c 2>&1 > capture_file 仅捕获c命令的输出。

4
用`mv`将换行符添加到文件名中
这是一个严重的问题。我测试了一些awk脚本,并且我需要名称中带有换行符的文件。 是否可以使用来在文件名中添加换行符mv? 我现在可以用touch: touch "foo bar" 通过触摸,我为每个副本和粘贴添加了换行符。但是我不能fooReturnbar在shell中写。 如何重命名文件以在文件名中包含换行符? 编辑2015/06/28; 下午07:08 要添加换行符,zsh我可以使用Alt+Return


4
保留每个工作目录的历史记录(参见每个shell会话)
有没有一种方法可以使现代外壳的历史特征仅限于路径? 我的工作上下文被拆分为文件系统上的路径,并且shell活动的模式(例如重复发出的命令)对于每个“项目”而言都是不同的。如果我可以将历史记录功能的作用域范围限定为从当前路径(或子路径)发出的命令,那就太好了。

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.