Questions tagged «bash»

有关为Bash命令外壳编写的脚本的问题。对于具有错误/语法错误的shell脚本,请在此处发布之前,使用shellcheck程序(或在Web shellcheck服务器中的https://shellcheck.net)进行检查。有关Bash交互使用的问题更可能是Super User而不是Stack Overflow上的话题。


5
如果,ifif,否则Bash中的语句问题
我似乎无法弄清楚以下if声明与elifand有关的问题then。请记住,printf仍在开发中,我只是尚未在声明中对其进行测试,因此很可能是错误的。 我得到的错误是: ./timezone_string.sh: line 14: syntax error near unexpected token `then' ./timezone_string.sh: line 14: `then' 声明是这样的。 if [ "$seconds" -eq 0 ];then $timezone_string="Z" elif[ "$seconds" -gt 0 ] then $timezone_string=`printf "%02d:%02d" $seconds/3600 ($seconds/60)%60` else echo "Unknown parameter" fi
358 bash  if-statement 

9
shell命令中“ &&”的目的是什么?
据我所知,使用&after命令是在后台运行它。 &用法示例:tar -czf file.tar.gz dirname & 但是&&呢?(请看以下示例:https : //serverfault.com/questions/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188)

21
如何最好地包括其他脚本?
您通常包含脚本的方式是使用“源代码” 例如: main.sh: #!/bin/bash source incl.sh echo "The main script" 包括sh: echo "The included script" 执行“ ./main.sh”的输出为: The included script The main script ...现在,如果您尝试从另一个位置执行该Shell脚本,除非包含在您的路径中,否则它将找不到包含。 确保脚本可以找到包含脚本的好方法是什么,特别是例如在脚本需要可移植的情况下?
353 bash 

5
在Bash中的命令对管道中的第二个命令不起作用之前设置环境变量
在给定的外壳中,通常我会设置一个或多个变量,然后运行命令。最近,我了解了在命令前添加变量定义的概念: FOO=bar somecommand someargs 这行得通...有点。当您更改LC_ *变量(这似乎会影响命令,但不影响其参数,例如'[az]'char范围)时,或者在将输出管道输送到另一个命令时,此命令将无效: FOO=bar somecommand someargs | somecommand2 # somecommand2 is unaware of FOO 我还可以在somecommand2前面加上“ FOO = bar”,它可以工作,但是会增加不必要的重复,并且对于根据变量解释的参数(例如,“ [az]”)无济于事。 那么,单行执行此操作的好方法是什么? 我在想一些事情: FOO=bar (somecommand someargs | somecommand2) # Doesn't actually work 我有很多好的答案!目标是保持这种单线,最好不使用“导出”。总体上,使用Bash调用的方法是最好的,尽管括号中带有“ export”的版本更为紧凑。使用重定向而不是管道的方法也很有趣。


4
无限重击历史[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 我希望我的.bash_history文件不受限制。例如,所以我总是可以回头看看我是如何构建/配置某些东西的,或者那个漂亮的命令是什么,或者某条命令在几周前是如何中断的。如何更改此设置?
350 bash  unix 

12
在Bash中ssh和运行多个命令的最干净方法是什么?
我已经设置了ssh代理,并且可以使用Bash脚本在外部服务器上运行命令,例如: ssh blah_server "ls; pwd;" 现在,我真正想做的是在外部服务器上运行许多长命令。将所有这些用引号引起来是很丑陋的,我真的宁愿避免多次使用ssh来避免这种情况。 那么,有什么办法可以让我用括号括起来吗?我正在寻找以下方面的东西: ssh blah_server ( ls some_folder; ./someaction.sh; pwd; ) 基本上,只要它是干净的,我都会对任何解决方案感到满意。 编辑 为了澄清起见,我说的是这是一个更大的bash脚本的一部分。其他人可能需要处理脚本,因此我想保持脚本干净。我不想让bash脚本的一行看起来像这样: ssh blah_server "ls some_folder; ./someaction.sh 'some params'; pwd; ./some_other_action 'other params';" 因为它非常难看且难以阅读。
349 bash  unix  ssh 

18
如何通过名称而不是PID杀死进程?
有时,当我尝试启动Firefox时,显示“ Firefox进程已在运行”。因此,我必须这样做: jeremy@jeremy-desktop:~$ ps aux | grep firefox jeremy 7451 25.0 27.4 170536 65680 ? Sl 22:39 1:18 /usr/lib/firefox-3.0.1/firefox jeremy 7578 0.0 0.3 3004 768 pts/0 S+ 22:44 0:00 grep firefox jeremy@jeremy-desktop:~$ kill 7451 我想要的是一个可以为我完成所有任务的命令。它会grep在进程列表中使用一个输入字符串并将其(或其他内容)放入其中,并杀死输出中的所有进程: jeremy@jeremy-desktop:~$ killbyname firefox 我尝试在PHP中执行此操作,但exec('ps aux')似乎只显示已exec()在PHP脚本本身中执行过的进程(因此,它显示的唯一进程是其自身。)
349 linux  bash  shell 



4
如何限制递归文件列表的深度?
有没有办法限制Linux中递归文件列表的深度? 我目前使用的命令是: ls -laR > dirlist.txt 但是我有大约200个目录,每个目录都有10个目录。因此,这将花费很长时间并且浪费太多的系统资源。 我真正感兴趣的是第一级子目录的所有权和权限信息: drwxr-xr-x 14 root root 1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk drwxr--r-- 14 jon root 1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/htdocs drwxr--r-- 14 jon root 1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/cgi-bin drwxr-xr-x 14 root root 1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk drwxr-xrwx 14 proftp root 1234 Dec …
346 linux  bash 

7
如何在bash中使用getopts的示例
我想以myscript这种方式调用文件: $ ./myscript -s 45 -p any_string 要么 $ ./myscript -h #should display help $ ./myscript #should display help 我的要求是: getopt 在这里获取输入参数 检查是否-s存在,如果不返回错误 检查后面的值-s是45还是90 检查是否-p存在并且在输入字符串之后 如果用户输入./myscript -h或仅./myscript显示帮助 到目前为止,我尝试了以下代码: #!/bin/bash while getopts "h:s:" arg; do case $arg in h) echo "usage" ;; s) strength=$OPTARG echo $strength ;; esac done 但是用该代码我得到了错误。如何使用Bash和getopt?
345 bash  shell  getopts 

10
因为stdin不是终端,所以不会分配伪终端
我试图编写一个Shell脚本,该脚本在远程服务器上创建一些目录,然后使用scp将文件从本地计算机复制到远程服务器上。这是我到目前为止的内容: ssh -t user@server<<EOT DEP_ROOT='/home/matthewr/releases' datestamp=$(date +%Y%m%d%H%M%S) REL_DIR=$DEP_ROOT"/"$datestamp if [ ! -d "$DEP_ROOT" ]; then echo "creating the root directory" mkdir $DEP_ROOT fi mkdir $REL_DIR exit EOT scp ./dir1 user@server:$REL_DIR scp ./dir2 user@server:$REL_DIR 每当我运行它时,我都会收到以下消息: Pseudo-terminal will not be allocated because stdin is not a terminal. 脚本将永远挂起。 我的公钥在服务器上是受信任的,我可以在脚本之外运行所有命令。有任何想法吗?
345 linux  bash  shell  ssh 

30
如何在Linux和OS X上获取本地计算机的主IP地址?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 去年关闭。 我正在寻找一个命令行解决方案,该解决方案将返回本地主机的主要(第一个)IP地址,而不是127.0.0.1。 该解决方案至少应适用于Linux(Debian和RedHat)和OS X 10.7+ 我知道这ifconfig两种方法都可用,但是它们在这些平台之间的输出不一致。
338 bash  unix  ip  ifconfig 

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.