Questions tagged «bash»

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

3
使用一个sudo执行一行命令
例如,如果要创建文件并在一行中输入文本,可以使用>运算符将输出重定向到文件中: echo "something" > /path/foobar 但是,如果我无权访问该文件夹/path/并且需要sudo特权,那么我如何才能像具有sudo权限的普通用户一样实现此命令? 我试过了 sudo echo "something" > /path/foobar 但不起作用,因为须藤只计数的edit而不是右部 的> 当然,我可以先成为root sudo su或使用tee: echo "something" | sudo tee /path/foobar 但我想找到一个解决方案,在其中我可以通过替换来处理最后一行 sudo !! 是否没有办法“回收”最后一行并sudo在前面添加?


2
如何使点文件与系统无关?
由于工作量,我最近开始使用OS X,并使用自制软件进行了设置,以获得与Linux类似的体验。 但是,它们的设置有很多差异。有些只需要在一个系统上就位。当我的点文件位于git存储库中时,我想知道可以设置哪种开关,以便仅对Linux系统和OS X读取某些配置。 至于点文件,我指的是.bash_profiles或.bash_alias。

4
我更改了主机名,为什么我的bash PS1提示符不变
我通过编辑/ etc / hostname更改了主机名,并可以使用hostnameand hostname -F命令查看新的主机名。 但是,shell提示符仍显示旧的主机名。 顺便说一下,这是Ubuntu 11.0.4。提示设置在我.bashrc尚未编辑的位置。注销甚至重新启动均无效。 标准Ubuntu的相关部分.bashrc: if [ "$color_prompt" = yes ]; then PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' else PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' fi (我登录时未设置$ debian_chroot ...) 我猜主机名是由特殊字符\ h选取的。 这是Shell中报告的PS1设置: PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' PS1显示了以下内容: username@oldhostname:~$ 我使用沃伦答案中的确切命令重复了该过程。事实证明,主机名在重新启动之前一直有效,但是即使/etc/hostname包含了新的主机名,它也会丢失。
21 bash  ubuntu  hostname 


3
发生错误时,如何在Bash中找到行号?
您如何在Bash中找到发生错误的行号? 例 我用行号创建以下简单脚本,以解释我们需要什么。该脚本将从以下位置复制文件 cp $file1 $file2 cp $file3 $file4 当cp命令之一失败时,该函数将退出并退出1。我们要向该功能添加功能,以便也用行号(例如8或12)打印错误。 这可能吗? 样例脚本 1 #!/bin/bash 2 3 4 function in_case_fail { 5 [[ $1 -ne 0 ]] && echo "fail on $2" && exit 1 6 } 7 8 cp $file1 $file2 9 in_case_fail $? "cp $file1 $file2" 10 11 12 …

3
如果为空,如何将带引号的变量扩展为空?
假设我有一个脚本正在执行: some-command "$var1" "$var2" ... 而且,在var1为空的情况下,我希望将其替换为空字符串而不是空字符串,以便执行的命令为: some-command "$var2" ... 并不是: some-command '' "$var2" ... 有没有比测试变量并有条件地包含它更简单的方法了? if [ -n "$1" ]; then some-command "$var1" "$var2" ... # or some variant using arrays to build the command # args+=("$var1") else some-command "$var2" ... fi 在bash,zsh等中,是否有参数替换无法扩展为空?我可能仍想在其余参数中使用globing,因此禁用该选项并取消引用该变量不是一种选择。

7
Bash中存在编程的“回调”概念吗?
几次阅读编程知识时,我都遇到了“回调”概念。 有趣的是,我从来没有找到一个我可以称呼为“回调函数”或“清晰”的解释(对于我来说,几乎我读过的任何解释似乎与其他解释都足够不同,我感到困惑)。 Bash中存在编程的“回调”概念吗?如果是这样,请用一个简单的Bash小示例进行回答。
21 bash  function 

4
目录中CD的别名并调用命令
我有一个.bash_profile,并且我有一组别名。目前,这些别名仅执行一个命令,这非常容易。但是,我想使用我要创建的新别名来做两件事。 光盘进入目录 从该目录运行命令
21 bash  alias  cd-command 


3
导入MySQL数据库时获得进度指示器
我经常导入MySQL数据库,这可能需要一段时间。没有任何进度指示器。能以某种方式显示出来吗?导入记录,导入MB或导入表...比等待更好。有人知道吗? 我使用以下命令: mysql -uuser -p -hhost database < largefile.sql 文件介于40-300 MB之间,并且主机位于本地网络内。
21 bash  mysql 

4
什么是“ IFS”?
我正在阅读此线程:如何循环遍历文件行? 什么IFS啊 在for-loops 上下文中它的用法是什么?
21 bash  shell 

2
如何在Debian上实施软件包安装建议?
我注意到在Ubuntu上,如果输入以下内容: mc 并且它没有安装,我得到以下消息: The program 'mc' is currently not installed. You can install it by typing: sudo apt-get install mc 但是在Debian中,这不可用。它只给出“ -bash:/ usr / bin / mc:没有这样的文件或目录”消息。如何在Debian的bash命令行中实现相同的功能?是的,我知道,如果这是我想要的包装建议,则可以使用apt-cache search进行正则表达式搜索。但是,我希望在键入程序名称时立即提出更简单的建议。 根据讨论,该功能由package command-not-found提供。但是,即使在安装它并安装bash-completion软件包之后,在Debian bash shell上也不可用。

3
在bash中为> 1个程序传递密码的安全方法
我正在编写bash脚本,需要询问用户密码并将其传递给openssl。虽然openssl可以读取密码本身,但我需要运行两次程序,并且不想两次询问用户。这是脚本: cp file{,.old} read -sp 'Enter password. ' PASS; echo export PASS # decode | edit | encode openssl enc -d -aes-256-cbc -k "$PASS" -in file.old | \ sed ... | openssl enc -e -aes-256-cbc -k "$PASS" -out file unset PASS 这是不安全的,因为通过查看命令行很容易获得密码。ps例如,有人可以使用阅读它。 openssl可以从环境变量中读取密码,因此可以替换-k "$PASS"为-pass env:PASS,但这仍然不安全;任何进程的环境变量都可以自由读取(再次ps可以做到)。 那么,如何安全地将密码传递给两个openssl实例?

3
为什么[-n]不像[-n“”]一样假?
我的问题是关于此代码产生的返回值: if [ -n ]; then echo "true"; else echo "false"; fi 打印true。 它的补充测试[ -z ]还使用打印true: if [ -z ]; then echo "true"; else echo "false"; fi 在上面的代码中,为什么[ -n ]测试会假设根本没有传递的字符串值不为null? 下面的代码打印出来false。这是预期的,因为传递的字符串值为null,长度为零。 if [ -n "" ]; then echo "true"; else echo "false"; fi
20 bash 

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.