Questions tagged «bash»

与其他Bourne / POSIX shell相对,GNU的Bourne Again SHell特有的问题。对于一般关于Unix shell的问题,请改用/ shell标记。

5
如何在条件语句中退出脚本?
我正在编写一个bash脚本,如果用户不是root用户,我想在其中退出。有条件的工作正常,但脚本不会退出。 [[ `id -u` == 0 ]] || (echo "Must be root to run script"; exit) 我尝试使用&&代替,;但是都没有用。

3
关闭文件描述符,>&-vs <&-
在我正在阅读的bash教程中,它说如果您打开文件描述符进行读取,即 exec 3&lt; echolist 然后您必须像这样关闭它 exec 3&lt;&amp;- 但是,如果打开文件描述符进行写入,则必须像这样关闭它: exec 3&gt;&amp;- 然而,当我在互联网上浏览时,我看到人们打开文件,然后用以下命令关闭文件: exec 3&gt;&amp;- 注意:根据教程,何时应使用exec 3&lt;&amp;1。 所以我的问题是,是否可以通过exec n&gt;&amp;-n是文件描述符编号来关闭所有文件描述符?不管它是开放供阅读,写作还是同时开放?

2
Bash:如何从命令输出一次读取一行?
我正在尝试使用读取bash中命令的输出while loop。 while read -r line do echo "$line" done &lt;&lt;&lt; $(find . -type f) 我得到的输出 ranveer@ranveer:~/tmp$ bash test.sh ./test.py ./test1.py ./out1 ./test.sh ./out ./out2 ./hello ranveer@ranveer:~/tmp$ 在这之后我尝试了 $(find . -type f) | while read -r line do echo "$line" done 但是它产生了一个错误test.sh: line 5: ./test.py: Permission denied。 因此,我如何逐行阅读它,因为我认为当前它一次吞噬了整行。 要求的输出: ./test.py …
49 bash  shell  find  pipe 




8
cron会忽略“ .bashrc”和“ .bash_profile”中定义的变量
我在/ etc / crontab文件中定义了“ SHELL”变量: [martin@martin ~]$ grep SHELL /etc/crontab SHELL=/usr/local/bin/bash [martin@martin ~]$ file /usr/local/bin/bash /usr/local/bin/bash: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), dynamically linked (uses shared libs), for FreeBSD 8.0 (800107), stripped [martin@martin ~]$ 另外,我在/ etc / crontab文件中的所有脚本都在用户“马丁”下启动。但是/home/martin/.bash_profile(用于登录shell)和/home/martin/.bashrc(用于非登录shell)包含一些变量,这些变量在cron作业的情况下会被忽略,但是在我登录到计算机上方时使用SSH或打开新的bash会话。为什么cron会忽略这些变量?cron是否只是简单地执行具有用户“马丁”权限的“ / usr / local / bin / bash my-script.sh”?
49 bash  cron 

4
在bash脚本中提示输入sudo密码并以编程方式提升特权?
我目前正在研究一个bash脚本,该脚本可以在现有的Linux系统(当前为Ubuntu)上安装和设置各种程序。因为它安装程序并将大量文件复制到需要提升特权的各种文件夹中,所以我已经完成了标准的“我需要提升特权”并退出。 但是,我希望,如果可能的话,如果用户不使用sudo运行script命令(例如从GUI文件管理器启动它),则能够提示用户输入sudo密码并自动提升脚本的特权,无需用户重新启动脚本。 由于它旨在在库存的Linux安装上运行,因此修改系统的任何选项均无法达到我的目的。所有选项都必须包含在脚本本身中。 在Bash中可能吗?如果是这样,什么是最好的(安全,简洁)方法?
49 bash  sudo 


1
为什么bash不存储以空格开头的命令?
如果我执行一系列命令,例如: $ ls $ grep abc file.txt 然后使用向上箭头键获取上一个,终端将显示最后一个cmd(在grep此处) 但是,如果我做这样的事情: $ ls $ grep abc file.txt 在grep前面加空格的情况下,按会给出ls,而不是grep。 为什么是这样?




4
如何从数组中完全删除元素?
unset array[0]删除元素,但是如果我仍然echo ${array[0]}得到null值,还有其他方法可以执行此操作,但是如果数组的元素包含如下所示的空格 array[0]='james young' array[1]='mary' array[2]='randy orton' 但是这些也做不到 array=${array[@]:1} #removed the 1st element 现在我希望新数组像 array[0]='mary' array[1]='randy orton' 分配后,空格会引起麻烦,实际数组变得像替换一样。 array=(mary randy orton)

16
使用awk命令删除重复的$ PATH条目
我试图编写一个bash shell函数,该函数将允许我从PATH环境变量中删除目录的重复副本。 有人告诉awk我,可以使用命令使用一行命令来实现此目的,但是我不知道该怎么做。有人知道吗?
48 bash  shell  awk  path 

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.