每次登录Linux后,它显示: /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/xx/bin::-bash:没有这样的文件或目录
我注意到里面有“=”字,但我不知道为什么。我的.bash_profile:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashr
我的代码的概念类似于:
#include <stdio.h>
int main(int argc, char *argv[])
{
int num;
FILE *fp;
getint("num",&num); /* This line is pseudo-code. The first argument is key for argument, the second is the variable storing the input value */
fp = inputfile("input"); /* This line
我正试图在我的.zshrc中进行操作系统检查。在Ubuntu上运行时,我无法获得与Ubuntu的字符串比较的正确匹配。
片段:
function get_linux_distro()
{
echo `awk -F= '/^NAME/{print $2}' /etc/os-release`
}
function is_os_ubuntu()
{
set -x
local dist=`get_linux_distro`
if [[ ${dist} = "Ubuntu"* ]]; then # <<< string
我尝试创建一个var来在k8s中执行一些操作。我有意在'=‘和导出和我的cmd之间留出空间,我想要快捷。为什么linux会给我带来错误?
export do = '--dry-run=client -o yaml'
-bash: export: `=': not a valid identifier
-bash: export: `--dry-run=client -o yaml': not a valid identifier
我使用的是GNU bash,versión 5.0.3(1)-release (x86_64-pc-linux-gnu),我想知道为什么一个简单的赋值语句会给出一个语法错误:
#/bin/bash
var1=/tmp # This works
let var2=/tmp # This fails with syntax error: Operand expected (error is "/tmp")
有人知道为什么吗?谢谢
是否有bash选项或其他方法使bash只展开${var}之类的大括号变量,而忽略常规变量(如$var )?
更新--这就是我为什么要这样做的原因:我有一个用纯bash编写的相对较大的程序,它必须保持在纯bash中(它是一个专为在大多数Linux发行版上运行而设计的安装程序,我们不想添加额外的依赖项)。它有一个非常简单的模板引擎,用bash编写。下面是模板解析代码(全部):
function apply_template() {
local src=$1
local dst=$2
local code="
cat< $dst
}
它非常简单,但非常有效。我们有30个模板
我需要一行if语句
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then do-something &; fi
我想把任务do-something放到do-something &的后台,但是bash抱怨
bash: syntax error near unexpected token `;'
然后我试图用&和\&逃离
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then do-something \&; fi
但这似
我试过这个例子:loop = $(($loop + 1))
但是Linux Shell告诉我
./while_and_read.sh:第17行:循环:未找到命令
在Linux中,我应该如何使用循环vairable来增加每循环1次呢?
#!/bin/bash
echo "Please type a number which it should be greeter than 0."
read -p "Number:" -t 5 x
sum=0
loop=0
if [ $x -le 0 ];then
echo "Please type a
我在这里也面临着同样的问题:从cmd.exe (WSL)向bash传递命令不起作用
不过,对我来说,那里的解决办法也是行不通的。
我已经安装了WSL,我正在尝试从cmd.exe运行一个名为“打赌”的命令
开放cmd.exe
键入bash -c -i "bet"
这会引发错误:
Command 'bet' not found, did you mean:
command 'bget' from deb ax25-tools (0.0.10-rc4-3build1)
command 'bst' from deb builds
GNU bash,版本4.1.5(1)-发布-(i486-pc- Linux -gnu) Ubuntu Linux 10.04
这会将var打印为1234,但不会打印var2
#!/bin/bash
var=1234
while var=9876 var2=765 read line
do
echo $var $var2
echo $line
done <datafile
echo out of loop $var
o/p
1234
This is line 1
1234
This is line 2
1234
This is line 3
1234
This
最近,我在xdotools和bash脚本方面遇到了一些问题。我已经深入到让我的Linux安装看起来更好看了,所以我决定让bash脚本在登录到我的DE显示htop时打开一个窗口。我已经设法自动打开窗口的过程,但我无法移动窗口,因为我无法获得适当的窗口ID,因为终端报告这一点;
./htop.sh: line 5: search: command not found
显然,"htop“是文件的名称,"search”是我试图运行的获取窗口id的命令。另外,为了在我的代码中提供一些上下文:
#!/bin/bash
# displays 'htop' in the b
观察到一种我不明白的有趣的狂欢行为。
基本上,在bash中链接命令时,这两个命令之间是否存在分号似乎对bash行为产生了影响。特别是下面两个示例,一个可以读取Python中的env变量,另一个不能读取
yuli@yuli-desktop:~$ A=1; python3
Python 3.8.10 (default, Nov 26 2021, 20:14:08)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more informa
如果我输入以下两个命令:
i=1
var$i=2014
我收到一条错误消息var1=2014: command not found。
我已经发现了如何在 SO post中使用declare来实现动态变量名,但我仍然想知道为什么会生成这个错误消息。这意味着bash将var1=2014视为命令/可执行文件的名称,而不是赋值,并且if this line is an assignment测试发生在$i扩展之前。
问题:
bash解析输入行w.r.t的顺序是什么。任务?
任何推荐的读物也是值得感谢的。
我在bash中有这三行代码,它们工作得非常好。我想将它们添加到一些现有的perl脚本中,但我以前从未使用过perl……
有人能帮我重写一下吗?我试着按原样使用它们,但不起作用
注意,$SSH_CLIENT是一个运行时参数,如果您在bash (linux)中输入set,就会得到这个参数。
users[210]=radek #where 210 is tha last octet from my mac's IP
octet=($SSH_CLIENT) # split the value on spaces
somevariable=$users[${octet[0]#
下面的代码将导致'if‘语句提前退出,而不是在'if’块中执行'echo‘命令。我想知道为什么这只发生在'if‘块,而不是在脚本的主要部分。注意:我理解将':=‘改为’:‘将解决问题--我并不想修复这个问题,我希望了解'if’块的执行环境之间的区别,它首先导致了问题的发生。
#!/bin/bash
if true; then
VAR=${$1:='val'}
echo "This does not run"
fi
VAR=${$1:='val'}
echo