Questions tagged «shell»

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

2
&>>&和2>&1之间的重定向差异
在该SO线程和其他一些线程上,我已经看到以下用于重定向stdout和stderr到文件的命令。 它们都相等吗?它们之间有什么区别吗? command1 >> logfile 2>&1 command &> logfile command >& logfile

3
清除或禁用zsh中的别名
我安装了oh-my-zsh,使终端的使用更加轻松。不过,令我困扰的一件事是它添加的多产别名,例如“ ga”,“ gap”,“ gcmsg”,“ _”,这些别名比原始命令更难记,并且污染了命令哈希表。 那么有没有一种方法可以完全禁用别名呢?还是一种清除所有别名以便将其放入我的方式.zshrc?
12 shell  zsh  alias  oh-my-zsh 

2
Bash字符串串联用于构建参数列表
鉴于这一点: PARMS='-rvu' PARMS+=" --delete --exclude='.git'" echo $PARMS rsync ${PARMS} . ${TARGET} 回显按预期显示PARMS字符串,不显示任何错误,但rsync默默地充当+ =添加的选项。但是,这按预期工作: PARMS='-rvu' rsync ${PARMS} --delete --exclude='.git' . ${TARGET} 我想我用bash引号搞砸了(这些引号总是有问题),但是即使字符串似乎已经正确构建,也不能完全确定忽略了什么以及为什么忽略了这些选项。

2
创建到当前目录的绝对符号链接
我现在位于路径很长的目录下。为了将来更快地访问它,我想创建一个链接。 我试过了 ln -s . ~/mylink ~/mylink实际上链接到~。那么我可以扩展~为绝对路径名,然后给它ln吗?
12 shell  symlink  cwd 

1
关于便携式sed -e ... db或!??
在此编辑中, StéphaneChazelas通过 再次插入xpression break和另一个xpression语句来对我的格式进行POSIX 化 。现在,我想问问他为什么在评论中,但是答案已经是修订版18,并且几乎所有以前的版本都已经得到了类似免费赠品的感谢(如果您可以看到已删除的评论,您将会知道我的意思是)。另外,我认为我已经足够了解为什么用一种可能更有用的方式来表达这一点。所以在这里...sed-e-e 我通常会尽量将总sed -e表情数保持在一个,但我也更倾向于尽可能符合规范,尤其是当差异不超过a <space>和an时-e。但是,如果我不明白为什么应该这样做,我将无法做到这一点。以下是我所了解的当前状态的简要摘要: 在' -e '休息能够方便地站在了一个sed脚本\n在ewline突破sed命令行语句...... 我承认模糊为什么 sed {函数中}的\n右括号必须在前面加一条斜线,如下所示: 的<right-brace>前面应带有a,<newline>并且可以在<blank>字符之前或之后。 一个\newline休息也同样需要进行以下任何使用...... a,b,c,i,r,t,w,或:。 但是我不清楚{函数}定义与!not运算符之间的关系。我在规范中唯一提到否定运算符的地方是: 一个功能之前可以有一个或多个!字符,在这种情况下,如果地址未选择模式空间,则应应用该功能。 这是否意味着使用a !表示{括号}?$!命令是什么-它们是否也应被' -e '中断分隔?当Stéphane最近POSIX确定我的答案时,这是解决了什么问题? 我认为它要么是!否定运算符,要么是b他在编辑中处理的牧场语句(或者可能是同时出现),但我不知道,也不想。如果它是唯一的b牧场语句,那么我相信一个d会在它的地方做,消除了需要' -e '休息,但我宁愿是一个hazarding前三次一定POSIXified答案。你能帮我吗? 毕竟我确实冒险了,但是没有很大的把握...
12 shell  sed  posix 

7
在bash或zsh中序列化shell变量
有什么方法可以序列化shell变量吗?假设我有一个变量$VAR,并且希望将其保存到文件或其他文件中,然后稍后再读回以获取相同的值? 有便携式的方法吗?(我不这么认为) 有没有办法在bash或zsh中做到这一点?
12 bash  shell  zsh  variable 


7
是否可以从`ls`命令中删除文件夹前缀
我在bash脚本中,我想获取所有文件的列表(比方说所有jar文件)。我执行命令ls -1 lib/*.jar并得到输出: lib/mylib_1.jar lib/mylib_2.jar ... 是否可以选择以下输出: mylib_1.jar mylib_2.jar ... 制作cd lib前是不是一种选择,因为我在一个循环中,并需要在为想在循环里做动作的父文件夹。 我试图通过键入查找信息,man ls但是没有找到任何解决方案。 只要我可以将其传递给我的ls命令或自给自足,使用另一个命令的解决方案将是很好的。
12 bash  shell  directory  ls 

3
Shell脚本等待后台命令
我正在编写脚本,但是我需要一些我找不到解决方法... 我需要在后台“ command1&”中创建命令,然后在脚本中的某个地方等待命令完成之前再执行command2。基本上,我需要这样: 注意:每个命令都在特定目录中运行!在while循环结束时,我的command1创建了4个目录,其中每个目录都运行特定的进程,因此正在运行的进程总数为4 a=1 while [$a -lt 4 ] . command1 #Generates 1 Process a= `export $a +1` done #Wait until the 4 process end and then run the command2 . command2 我已经看到了有关wait带有pid进程号的命令的一些信息,但这也没有用。

1
为什么“ nohup命令>&/ dev / null”在某些shell中似乎“起作用”?
我在Ask Ubuntu上编辑了一个建议以下内容的答案 nohup gedit >& /dev/null & 当他们真正的意思是 nohup gedit &> /dev/null & 后者正确地将stderr和stdout都重定向到/dev/null。我期望前者会创建一个称为的文件,&或者更有可能像其他情况一样产生错误: $ echo "foo" >& bash: syntax error near unexpected token `newline' 相反,它的工作方式gedit似乎与前者完全相同,出现一个窗口,并且未打印任何错误消息。 我还要注意,这是特定于shell的: bash(4.2.45(1)-发行版),zsh(5.0.2),csh(deb软件包版本:20110502-2)和tcsh(6.18.01):如上所述工作,没有错误消息,没有创建文件。 dash (0.5.7-3): $ nohup gedit >& /dev/null & $ dash: 2: Syntax error: Bad fd number ksh(93u + 2012-08-01):失败,但是1223尽管没有gedit出现窗口,但显然已启动了一个进程(): $ nohup gedit …

4
复制时如何重命名文件?
在重命名每个文件以从名称(即-2b0fd460_1426b77b1ee_-7b8e)中删除随机字符串部分的同时,如何将备份目录中的所有文件复制(不更改日期的归档样式)到用户目录? cp来自: /backup/path/data/Erp.2014.02.16_16.57.03-2b0fd460_1426b77b1ee_-7b8e.etf 至: /home/user/data/Erp.2014.02.16_16.57.03.etf 每个文件将始终以“ Erp”开头。然后是日期时间戳字符串,然后是随机字符串,然后是扩展名“ .etf”。我想保留所有名称元素,包括日期时间戳。我只想删除随机字符串。 随机字符串允许同一文件的多个备份。但是,在这种情况下,我只运行了fdupes,没有重复项。因此,我可以简单地还原所有文件,删除随机字符串。 我正在寻找单行bash命令来执行此操作。 如果那行不通,我可以分两个或两个以上的步骤来完成。我通常使用KRename,但在这种情况下,我需要使用bash进行操作。(我正在远程工作。)
12 bash  shell  rename  file-copy 

3
两种查找命令比较
最近,我收到了这一find单行代码,但是我无法解释以下两者的区别来自哪里: 例子1 [root@centos share]# find . -exec grep -i "madis" {} /dev/null \; ./names:Madison Randy:300:Product Development 例子2 [root@centos share]# find . -exec grep -i "madis" {} \; Madison Randy:300:Product Development 如您所见,在第一个文件中,有一个从该字符串派生的特定文件,到目前为止,我还真的无法找出原因。
12 bash  shell  find 

4
重命名本地文件夹中的文件,添加前缀或后缀
我的文件夹中有很多文件,我想给它们添加前缀或后缀(不是全部)。我在这里检查后发现可以使用 for filename in *.jpg; do mv "$filename" "prefix_$filename"; done; 为所有结尾的文件添加前缀.jpg(如果删除.jpg,它将为当前文件夹中的所有文件添加前缀)。 但是,我希望能够 添加后缀(即重命名filename.ext为filename.whatever.ext), 检查前缀或后缀是否已经存在,然后跳过, 创建接受参数,如别名addprefix whatever *.ext或addsufix whatever *.*

6
为什么“ $((〜33))”产生-34?
$ echo $(( 255 )) 255 $ echo $(( 33 )) 33 $ echo $(( ~33 )) -34 $ echo $(( ~255 )) -256 $ 而我的内核是: $ uname -a Linux HOSTNAME 3.2.0-40-generic-pae #64-Ubuntu SMP Mon Mar 25 21:44:41 UTC 2013 i686 i686 i386 GNU/Linux 问题: ~用于否定数字FAIKK。但是为什么~33产生-34,为什么~255产生-256?
12 bash  shell  arithmetic 


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.