Questions tagged «shell»

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

2
创建变量并通过循环(bash)分配值
有没有一种方法可以创建bash变量并通过循环为它们分配值? 类似于以下内容: #!/bin/bash c=0 for file in $( ls ); do var"$c"="$file"; let c=$c+1; done 编辑:感谢@Costas和@mdpc指出这将是列表的替代方案;这个问题只是理论上的。

1
根外壳看到pip但sudo pip“未找到命令”
我已经通过make和安装了python 2.7.8 make install,然后通过get-pip进行了pip。我必须注意,我在通过代理设置的代理后面工作 http_proxy ftp_proxy https_proxy 在 我的用户的 ~/.zshrc 根的 /root/.basrc 现在我可以跑步了 pip 在我的用户帐户上 在root帐户上 但是我无法使用sudo通过用户的外壳程序运行它 sudo pip sudo: pip: command not found 怎么了

3
有没有一种方法可以让我的bash脚本在任何命令错误时自动运行?
我正在编写一个需要执行一系列命令的shell脚本,每个命令都取决于每个先前的命令。如果有任何命令失败,则整个脚本将失败,我将调用退出函数。我可以检查每个命令的退出代码,但是我想知道是否存在可以启用的模式或一种使bash自动执行此操作的方法。 例如,使用以下命令: cd foo || myfunc rm a || myfunc cd bar || myfunc rm b || myfunc 有没有一种方法可以在执行这些命令之前以某种方式向外壳发出信号,如果它们中的任何一个失败,它应该调用myfunc,这样我可以编写一些更简洁的代码,例如: cd foo rm a cd bar rm b

5
找到一些文本后如何阅读某些行?
找到一些文本后如何阅读一定数量的行? 例如。: 在以下位置找到“ Unix”后,请阅读下两行: Test 1 Test 2 Test 3 Test 4 UNIX Test 5 Test 6 Test 7 Test 8 Test 9 结果可以是: Test 5 Test 6 注意:最后一个示例中的“ Unix”是一个参数,因此,它可以是任何其他文本。 我拥有的: 我仍然没有主意,只需要一点灯。考虑创建另一个脚本来做到这一点。
12 bash  shell 

5
Shell命令输出中的字符数
我正在编写一个脚本,该脚本需要一步来计算命令输出中的字符数。 例如,使用该命令readlink -f /etc/fstab应该返回,10因为该命令的输出为10个字符长。 使用以下代码,使用存储的变量已经可以做到这一点: variable="somestring"; echo ${#variable}; # 10 不幸的是,对命令生成的字符串使用相同的公式不起作用: ${#(readlink -f /etc/fstab)}; # bash: ${#(readlink -f /etc/fstab)}: bad substitution 我知道可以通过首先将输出保存到变量来做到这一点: variable=$(readlink -f /etc/fstab); echo ${#variable}; 但我想删除多余的步骤。 这可能吗?仅使用内置或标准实用程序与Almquist shell(sh)兼容是可取的。
12 shell  string  variable 

3
bash的条件表达式中-a和-e有什么区别?
来自man bash: CONDITIONAL EXPRESSIONS [...] -a file True if file exists. [...] -e file True if file exists. 那么[ -a $FILE ]和之间有什么区别[ -e $FILE ](如果有)? 如果没有真正的区别,为什么存在两个用于相同目的的标志?
12 bash  shell  test 

3
进入通过链接链接的目录
当我cd链接时,当前路径的前缀是链接的路径,而不是链接链接到的目录的路径。例如 ~/dirlinks/maths$ ls -l logic lrwxrwxrwx 1 tim tim 71 Jul 27 10:24 logic -> /windows-d/academic discipline/study objects/areas/formal systems/logic ~/dirlinks/maths$ cd logic ~/dirlinks/maths/logic$ pwd /home/tim/dirlinks/maths/logic ~/dirlinks/maths/logic$ cd .. ~/dirlinks/maths$ 我想将当前路径更改为链接目录的路径,以便我也可以使用链接目录的父目录。除了ls找到链接目录然后cd进入目录的链接之外,还有哪些更简单的方法可以实现该目的?例如,cd进入链接后,如何将当前路径更改为链接目录的路径?

3
传递多个命令以聚集
flock -x -w 5 ~/counter.txt 'COUNTER=$(cat ~/counter.txt); echo $((COUNTER + 1)) > ~/counter.txt' 我如何将多个命令传递给flock上面的示例? 据我了解,flock采用不同的标志(-x表示排他,-w表示超时),然后是要锁定的文件,然后是要运行的命令。我不确定如何将两个命令传递给该函数(设置具有锁定文件内容的变量,然后递增该文件)。 我的目标是在每次脚本尝试访问文件时通过锁定文件来为文件创建某种程度的原子增量counter.txt。

7
回声之前的时间戳
存在一种在echo?前面创建时间戳的更好方法。 目前,我这样做: #!/bin/sh if mount | grep -q /mnt/usb; then echo `date +%R\ ` "usb device already mounted" else echo `date +%R\ ` "mounting usb device..." mount -t msdosfs /dev/da0s1 /mnt/usb if mount | grep -q /mnt/usb; then echo `date +%R\ ` "usb device successfully mounted" fi fi 输出应如下所示: 10:36 …
12 shell  timestamps  echo 


4
在后台运行多个nohup命令
得到了两个命令cmd1和cmd2。在这两个中,cmd2需要更长的时间才能完成。需要先运行cmd2,然后再运行cmd1。 尝试通过以下方式运行它们: bash$ (nohup ./cmd2>result2 &) && nohup ./cmd1>result1 & 要么 bash$ (nohup ./cmd2>result2 &) ; nohup ./cmd1>result1 & 但是两次我都可以看到cmd1不等待cmd2完成并且result1被填充。 当两者都应为nohup进程并在后台运行时,如何使cmd1在cmd2之后运行?

3
识别系统软件包管理器
有没有办法(通过脚本)来标识默认的系统软件包管理器? 为了澄清,我想做的是运行一个给定的命令,在Debian或其任何派生版本上,它将返回类似“ apt”的内容,在openSUSE上它将返回“ zypp”,在Fedora等上它将返回“ yum”,在Arch Linux上将返回“ pacman”等。 我知道我可以使用类似以下的方法来做到这一点,我只是想知道是否存在一种更健壮的方法,只要有同名可执行文件就不会中断。 which apt >/dev/null 2>&1 if [ $? -eq 0 ] then echo "apt" fi # etc...


4
将整个目录树更改为小写名称
我正在进行网站转换。从Web服务器链接和提供的文件不区分大小写。但是,我已经在Linux系统上转储了该站点,并且正在编写脚本来迁移数据。问题是我遇到了页面中的链接字符串与文件系统上的实际单词大小写之间的区分大小写问题。 例如,页面可能有一个链接,<a href='/subfolder/PageName.asp'>而实际文件是/subfolder/pagename.asp。与图像相同- <img src='spacer_sm.gif'>可能是Spacer_Sm.gif。 因此,我的想法是将所有目录和文件名更改为网站下载的小写字母。我该怎么做(可能会有更好的方法吗?) 即使有些unix命令具有不区分大小写的开关,但我使用的是php,因此并非所有文件系统命令都具有区分大小写的选项。

4
空行上的zsh选项卡完成
我想要一种我找不到的tcsh'ism:在没有内容的空白行中,我想按Tab键并看到与ls等效的内容。就是说我要 $ <tab> 做其他事情然后给我一个\ t。我已经找到了用于完成命令的出色资源,但没有针对这种基本情况。任何帮助都会很棒!谢谢。

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.