-bash: [: =: 需要一元运算符。

我有我的 shell 脚本,myscript.sh以下 #!/bin/sh if [ $1 = "-r" ]; then echo "I am here" fi 如果我运行. myscript.sh -r,它与消息配合得很好I am here。 但如果我只是跑. myscript.sh,它抱怨 -bash: [: =: unary operator expected 我的脚本中缺少什么? 答案 您需要添加 1 美元左右的报价。 if [ "$1" = "-r" ]; then echo "I am here" fi 当 $1 为空时,您会得到 if [ = “-r”] 这是一个语法错误。 来自: stackoverflow.com

-bash:__git_ps1:找不到命令

我尝试安装 Ruby 2.0。 -bash: __git_ps1: command not found [11:58:28][whatever@whatever ~]$ 我不知道如何摆脱 __git_ps1 命令未找到错误。 我看见这,但我对命令行还很陌生,所以我自己都很困惑。 有任何想法吗? 答案 BASH 有很多方法可以自动设置提示符,为您提供有用的信息。PS1环境变量。PS1="$ "我的提示将如下所示: $ 信息量不大。 但是,如果我设置PS1=\u@\h: \w$,我的提示现在如下所示: david@vegibank:/usr/bin$ 这告诉我如何登录(\u),我正在使用的机器(\h),以及我所在的目录(\w)。git,如果我所在的 git 分支也是我的提示的一部分,那就太好了。 这正是您的情况.profile, 你的.bashrc文件,你的.bash_login或你的.bash_profile脚本。/etc/profile。 您可以做几件事。 下载缺失的__git_ps1并确保它在你的$PATH环境变量(由上面提到的各种初始化文件的组合设置) 改变你的PS1正在执行的任何初始化文件中的环境变量(我相信它可能是.bash_profile。 只需将其添加为最后一行: PS1="\u@\h:\w\n$ " 所添加的\n在下面的行上打印美元符号提示,如下所示: david@vegibank:/usr/bin $ 我喜欢这样做,因为提示可以相当长和编辑变得棘手的命令行提示符超过30到50个字符。手册页。 如果您发现它有点令人困惑,那么庆幸您没有使用 Kornshell。PS1=\u@\h:\w\n$是的,我将提示设置为: export PS1='$(print -n "`logname`@`hostname`:";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "\n$ ")' 来自: stackoverflow.com

-bash:/Users/myname/.bash_profile:权限被拒绝

我安装了rvm(ruby版本管理器)并且成功了,但是我得到了 警告:您有"~/.profile"文件,您可能想要加载它,以执行以下操作 将以下行添加到"/Users/myname/.bash_profile": 〜/.profile 我对开发、终端和所有这些爵士乐都是新手! 我进入终端: '/Users/myname/.bash_profile' 并返回以下行 -bash: /Users/myname/.bash_profile: Permission denied myname-MacBook-Pro:~ myname$ 这就是我被困住的地方! 答案 输入.bash_profile通过在终端中运行以下命令来创建文件: vim ~/.bash_profile 如果您仍然遇到权限被拒绝的情况,请运行sudo之前vim命令 sudo vim ~/.bash_profile 从那里,按insert按钮 。source ~/.profile到.bash_profile并按esc然后打:x按键盘上的 键保存并关闭文件。 来自: stackoverflow.com

-bash:导出:`=':不是有效的标识符

每次打开终端时,我都会收到以下错误: Last login: Sun Aug 4 17:23:05 on ttys000 -bash: export: `=': not a valid identifier -bash: export: `/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/mysql/bin': not a valid identifier -bash: export: `=': not a valid identifier -bash: export: `/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/mysql/bin': not a valid identifier 这是我的export输出: Calvin:~ sunkehappy$ export declare -x Apple_PubSub_Socket_Render="/tmp/launch-4lEZNa/Render" declare -x Apple_Ubiquity_Message="/tmp/launch-ukGAv5/Apple_Ubiquity_Message" declare -x COMMAND_MODE="unix2003" declare -x HOME="/Users/sunkehappy" declare -x LANG="zh_CN.UTF-8" declare -x LOGNAME="sunkehappy" declare -x OLDPWD declare -x PATH="/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin" declare -x PWD="/Users/sunkehappy" declare -x SECURITYSESSIONID="186a4" declare -x SHELL="/bin/bash" declare -x SHLVL="1" declare -x SSH_AUTH_SOCK="/tmp/launch-YAEryC/Listeners" declare -x TERM="xterm-256color" declare -x TERM_PROGRAM="Apple_Terminal" declare -x TERM_PROGRAM_VERSION="309" declare -x TERM_SESSION_ID="B134A404-D87F-4BB9-8A08-55F8CE923339" declare -x TMPDIR="/var/folders/kt/pfw99tps22gg2019vz8k1zcm0000gn/T/" declare -x USER="sunkehappy" declare -x __CF_USER_TEXT_ENCODING="0x1F5:25:52" 答案 你不能在=当您这样做时签名:...

-bash:意外标记“换行符”附近的语法错误

要重置 SolusVM 的管理员密码,我正在执行以下命令: php /usr/local/solusvm/scripts/pass.php --type=admin --comm=change --username=<ADMINUSERNAME> 执行此操作时,会打印以下错误消息: -bash: syntax error near unexpected token `newline' 出现这个问题的原因是什么? 答案 字符"<“和”>“表示占位符,您应该删除它们来阅读: php /usr/local/solusvm/scripts/pass.php --type=admin --comm=change --username=ADMINUSERNAME 来自: stackoverflow.com

-n和-a选项在bash if语句中有什么作用?

什么功能-a和-n选项在以下bash中执行if陈述? if [ -n "$1" -a -n "$2" -a -n "$3" ]; then REFNAME=$(basename $3) else 是-a和-n所谓*初选*? 做-a file意思是"如果文件存在则为真。"? 答案 挑剔 开关-a和-n不是严格的一部分bash if说明if命令不处理这些开关。 什么是初选? 我称它们为"开关",但是bash您链接到的文档是指与"初选"相同的东西(可能是因为这是讨论布尔表达的部分时使用的常见术语)。 背景和文档 在sh脚本if是一个命令,它将命令作为其参数,执行它并测试其返回代码。0代码块以下then被执行直到关闭fi或(如果提供)以下else。如果返回代码不是0和else提供了声明,然后代码块以下else被执行直到关闭fi。 您可以通过通过if命令true或命令false,这是简单的命令,无能为力并返回0和非 - 0分别。 if true ; then echo true was true ; else echo true was false ; fi if false ; then echo false was true ; else echo false was false ; fi 在示例代码中,您提供了要传递给的命令if是[,有时也称为test。正是此命令需要您要问的开关。在bash这test命令将是内置命令;尝试type [了解其类型。help将显示用法,因此也运行help [查看文档。/bin/[和一个/bin/test如果你man test你可以查看这些的手册。test可能与手册页中记录的行为不同,这可能比您从中获得的简单描述更详细help [,它可能会描述内置的行为[指挥相当准确。 -a 和 -n 的行为 知道您正在运行的命令是test我们可以咨询help test或者man test并阅读其用法。-n测试以下参数,如果它不是空字符串,则计算结果为 true。...

-z在bash中意味着什么?

我正在查看以下代码: if [ -z $2 ]; then echo "usage: ... (这3点是无关的用法细节。) 也许我在谷歌搜索错了,但是我找不到-z选项。 答案 -z string如果字符串为null(一个空字符串) 来自: stackoverflow.com

:(冒号)GNU Bash 内置函数的用途是什么?

一个不执行任何操作的命令的目的是什么,它只不过是一个注释领导者,但实际上它本身就是一个内置的 shell? 它%27s%20比%20将%20a%20注释%20插入%20你的%20脚本%20by%20大约%2040%%20每%20调用慢%20,%20其中%20可能%20变化%20很大%20取决于%20on%20的%20大小%20% # poor man's delay function for ((x=0;x<100000;++x)) ; do : ; done # inserting comments into string of commands command ; command ; : we need a comment in here for some reason ; command # an alias for `true' while : ; do command ; done 我想我真正想要的是它可能有什么历史应用。 答案 Historically , 伯恩炮弹没有true和false作为内置命令。true相反,只是简单地别名为:, 和false类似的东西let 0。 :略好于true以便移植到古老的 Bourne 衍生的 shell。!管道运营商也不是||列表运算符(就像一些古老的 Bourne shell 的情况一样)。else的条款if语句作为基于退出状态进行分支的唯一方法: if command; then :; else ...; fi 自从if需要一个非空的then子句和注释不算为非空,:充当空操作。...

./configure:/bin/sh^m:不良解释器

我一直在尝试在Fed 12系统上安装LPNG142。对我来说似乎是个问题。我有这个错误 [root@localhost lpng142]# ./configure bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory [root@localhost lpng142]# 我该如何解决?这/etc/fstab文件: # # /etc/fstab # Created by anaconda on Wed May 26 18:12:05 2010 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/VolGroup-lv_root / ext4 defaults 1 1 UUID=ce67cf79-22c3-45d4-8374-bd0075617cc8 /boot ext4 defaults 1 2 /dev/mapper/VolGroup-lv_swap swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 答案 要修复,请使用VI或VIM打开脚本,然后进入VI命令模式(键)Esc键),然后输入:...

.bashrc,.bash_profile和.environment之间有什么区别?

我已经使用了多年来的许多基于 *NIX的系统,而且我使用的每种bash的味道似乎都有不同的算法来决定要运行哪些启动脚本。为了实现任务的目的,例如设置环境变量和别名以及打印启动消息(例如MOTDS),哪个启动脚本是合适的地方? 将东西放入有什么区别.bashrc,,,,.bash_profile, 和.environment?我还看到了其他文件,例如.login,,,,.bash_login, 和.profile;这些有相关吗?在物理上登录时,哪些差异有什么区别,通过SSH远程登录并打开一个新的终端窗口?平台之间是否存在任何显着差异(包括Mac OS X(及其终端)和Cygwin Bash)? 答案 Shell配置文件的主要区别在于,有些仅由"登录" shell读取(例如,当您从另一个主机登录时或在本地Unix机器的文本控制台登录时)。这些被称为.login或者.profile或者.zlogin(取决于您使用的外壳)。 然后,您拥有由" Interactive" shell读取的配置文件(如在终端连接的shell(或伪终端),例如,在窗口系统下运行的终端模拟器)。这些是具有名称的终端。喜欢.bashrc,,,,.tcshrc,.zshrc, ETC。 bash使它复杂化.bashrc是only read by a shell that’s both interactive and non-login ,因此您会发现大多数人最终都会告诉他们.bash_profile也要阅读.bashrc有类似的东西 [[ -r ~/.bashrc ]] && . ~/.bashrc 其他贝壳的行为不同 - 例如zsh,,,,.zshrc无论是登录名是否登录,始终为交互式外壳读取。 BASH的手册页说明了每个文件的读取的情况。是的,机器之间的行为通常是一致的。 .profile只是最初使用的登录脚本文件名/bin/sh。bash,通常与/bin/sh,会读.profile如果存在。 来自: stackoverflow.com

'

考虑: gndlp@ubuntu:~$ test -x examples.desktop && echo $? gndlp@ubuntu:~$ test -x examples.desktop & echo $? [1] 2992 0 为什么 Bash 在这种情况下会这样做? 测试命令是否根本没有完成,因此echo命令未处理? 答案 的含义&&和&有着本质上的不同。 What is && in Bash? 在 Bash 以及许多其他编程语言中&&意思是"和"。&&在这种情况下应按顺序运行。 What is & in Bash? 还有一个单&表示前面的命令 - 紧邻的左侧&—应该简单地在后台运行。 所以看看你的例子: gndlp@ubuntu:~$ test -x examples.desktop && echo $? gndlp@ubuntu:~$ test -x examples.desktop & echo $? [1] 2992 0 第一个命令(按照其结构)实际上不返回任何内容。[1] 2992其中2992指的是后台运行的进程ID (PID)0是第一个命令的输出。 由于第二个命令刚刚运行test -x examples.desktop在后台,它发生得非常快,因此进程 ID 会生成并立即消失。 来自: stackoverflow.com

' r':找不到命令 - .bashrc / .bash_profile

我有Windows使用Cygwin,试图设置JAVA_HOME永久通过我.bashrc文件。 .bashrc: export PATH="$JAVA_HOME/bin:$PATH" export JAVA_HOME=$JAVA_HOME:"/cygdrive/c/Program Files (x86)/Java/jdk1.7.0_05" .bash_profile: if [ -f ~/.bashrc ]; then source ~/.bashrc fi running cygwin: -bash: $'\377\376if': command not found -bash: $'then\r': command not found : No such file or directorysu//.bashrc -bash: /cygdrive/c/Users/jhsu//.bash_profile: line 3: syntax error near unexpected token `fi' -bash: /cygdrive/c/Users/jhsu//.bash_profile: line 3: `fi' 我不确定我是否从一个用于另一个系统的教程中收取命令,或者是否错过了一步。或Whitespace导致我的命令无法正常运行。 我查看了多个类似的问题,但是我还没有找到一个问题,因为这个问题准确地出现了我的错误。 我的家道: $ echo $HOME /cygdrive/c/Users/jhsu $ echo ~ /cygdrive/c/Users/jhsu/ 因此,我相信这些文件应放置在正确的位置。 答案 When all else fails in Cygwin…...

'bash -c'做什么?

我遵循以下教程:http://davidtsadler.com/archives/2012/06/03/how-to-install-magento-on-ubuntu/ 在某个时候,它告诉我执行以下命令: sudo bash -c "cat >> /etc/apache2/sites-available/magento-store.com <<EOF <VirtualHost *:80> ServerName localhost.magento-store.com ServerAlias www.localhost.magento-store.com DocumentRoot /home/dev/public_html/magento-store.com/public LogLevel warn ErrorLog /home/dev/public_html/magento-store.com/log/error.log CustomLog /home/dev/public_html/magento-store.com/log/access.log combined </VirtualHost> EOF" 这个命令做了什么,我如何取消它? 我重新启动了计算机,看来它仍在运行。我看了看.bashrc和.profile,但是我没有在里面找到它。 答案 引用man bash: -c字符串如果存在-c选项,则从字符串中读取命令。 如果字符串之后有参数,则将它们分配给位置参数,从$ 0开始。 您引用的命令会附加 Heredoc中的文字(即VirtualHost标签)到文件/etc/apache2/sites-available/magento-store.com。 来自: stackoverflow.com

“ -ne”在bash中意味着什么?

命令" -ne"在bash脚本中是什么意思? 例如,bash脚本的以下行有什么? [ $RESULT -ne 0 ] 答案 如果您还不知道在哪里看,这是可能很难搜索的事情之一。 [实际上是命令,而不是您可能期望的bash shell语法的一部分。它恰好是bash命令,因此已记录在bash手册中。 还有一个外部命令可以做同样的事情。在许多系统上,它由GNU Coreutils软件包提供。 [等同于test命令,除此之外[需要]作为最后一个论点,以及test才不是。 假设您的系统上安装了BASH文档,则如果您输入info bash并搜索'test'或者'['(撇号是搜索的一部分),您会找到[命令,也称为test命令。如果您使用man bash代替info bash, 搜索^ *test(这个单词test在一条线的开头,跟随一些空间)。 在提到" bash条件表达式"之后,您将导致您的描述-ne,这是数字不平等运算符(" NE"代表"不等)。相比之下,!=是个细绳不平等运营商。 您还可以在网络上找到BASH文档。 bash参考 Bourne shell内置(包括test和[) bash条件表达式 - (滚动到底部;-ne在下面 “精氨酸1 OParg2") POSIX文档test 这官方的 定义test命令是POSIX标准(BASH实现应与某些扩展相同)。 来自: stackoverflow.com

“ [:太多参数”的含义来自if [](正方形括号)的错误

我找不到任何一个简单的简单资源来阐明并修复以下bash shell错误的含义,因此我在研究后发布了我发现的内容。 The error: -bash: [: too many arguments Google-friendly version: bash open square bracket colon too many arguments。 **Context:**单方面括号中的IF条件,带有简单的比较操作员等于等于:例如: VARIABLE=$(/some/command); if [ $VARIABLE == 0 ]; then # some action fi 答案 如果你的$VARIABLE是包含空格或其他特殊字符的字符串,和单方面托架(这是test命令),然后将字符串分为多个单词。这些中的每一个都被视为一个单独的论点。 以便one variable is split out into many arguments: VARIABLE=$(/some/command); # returns "hello world" if [ $VARIABLE == 0 ]; then # fails as if you wrote: # if [ hello world == 0 ] fi 对于放下包含空格或其他特殊字符的字符串的任何功能调用,也是如此。...