我已经为Linux提供了完美的构建脚本。目前,我想适应Cygwin的构建,使它跨平台。问题是构建脚本使用管道重定向,比如|和>,当使用Cygwin的‘bash-c’时,需要用^转义。
我想知道是否有任何解决方案可以避免为Cygwin转义每个管道重定向符号,比如bash命令行选项或env。
例子:
ls -l | tee 1.log在Linux中工作得很好,需要按照下面的方式与Cygwin的bash -c一起使用
ls -l ^| tee 1.log
下面的shell脚本在Linux中有效,但在Solaris上无效,
#!/usr/bin/bash
while getopts ":s:" opt; do
case $opt in
s)
# Check IP against regex
if [[ "$OPTARG" =~ "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(
在bash中,按C-x C-v会输出外壳的版本,例如
$ # pressing C-x C-v here
GNU bash, version 4.4.12(1)-release (x86_64-unknown-linux-gnu)
在zsh中,什么都不会发生。这同样适用于启动默认$EDITOR的其他“标准”bash组合键,如C-x C-e。
% # pressing C-x C-v here - nothing happens
% zsh --version
zsh 5.3.1 (x86_64-unknown-linux-gnu)
% # ^ I want to the above line
更新-看起来这是bash 4.3.42特有的东西,因为它与4.3.46很好地工作。把这个职位留给将来遇到同样问题的人。
当我在bash命令行中运行此命令时,它正常工作:
% (TMOUT=3; s="no selection"; select s in a b c ; do break ; done; echo $s)
1) a
2) b
3) c
#?
no selection
% _
结果:不显示选择并返回命令行。
然而,当我放置一个脚本并执行它时,它会重复请求选择。
% cat a.sh
#!/bin/bash
(TMOUT=3; s="no selection&
echo $var命令可以很容易地调用bash中变量的值,如下所示
user@linux:~$ a=1; b=2; c=a+b
user@linux:~$ echo $a $b $c
1 2 a+b
user@linux:~$
我想要实现的是用x中的实际值替换a,b,c
user@linux:~$ a=1; b=2; c=a+b
user@linux:~$ for i in a b c; do echo "$i = x"; done
a = x
b = x
c = x
user@linux:~$
通过使用类似的for循环,我希望能得到这样的输出
a = 1
b = 2
c
我注意到,OSx和Linux之间的printf内置似乎不一样。我的印象是内建物就是内建物。这与我正在处理的任何具体问题无关。我就是解释不了。
OSx
printf '%(+%s)T\n' -2
-bash: printf: `(': invalid format character
which printf
printf is a shell builtin
printf is /usr/bin/printf
Linux
printf '%(+%s)T\n' -2
+1431027100
which printf
printf is a shel
我只是在我的机器上安装了bashv4.1.0。
旧版本在/bin/bash下。有没有一种方法可以使用更新版本的bash而不替换/bin中的旧版本?我希望更新的版本被用作默认版本。
$ which bash
/bin/bash
$ bash --version
GNU bash, version 3.00.15(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.
$ ~/bash/bash-4.1/bash --version
GNU bash, version 4.1.0(1)
当其他机器通过FTP发送文件时,我有一个被写入的目录。当文件到达时,如果它们的文件名包含特定的子字符串(如"jpg"),我想在文件到达时注意到,将文件移动到其他目录(只有在文件到达之后,而不是之前)。
我想把它放在许多不同类型的Linux盒上。其中一个有Linux内核2.4.22。有可能是老的。我还在查呢。
在旧机器上,我看到的是:inotifywait: command not found。
我也看到过这样的情况:The inotify API is available in Linux 2.6.13 and later
这个:bash: watch: command not
我在许多堆栈交换网站和其他关于如何做日期数学教程网站上的例子。我尝试过linux (在容器上),得到了完全相同的错误:
$ docker run -it bash date -d '2014-11-19T15:40:30+10d'
date: invalid date '2014-11-19T15:40:30+10d'
bash-5.0# date -d '+10 days'
date: invalid date '+10 days'
bash-5.0# date -d '+10 d'
date: invali
我有一台Linux机(Bash5.1),我需要将以下任务添加到我的脚本中。
哪个Linux命令或Bash语法将计算下一个ASCII字符?
备注-命令语法也可以是Bash /Perl,但此语法必须在我的Bash脚本中。
示例:
input results
a --> the next is b
c --> the next is d
A --> the next is B
我尝试在bash脚本中使用history命令,但它没有工作。
bash文件的代码:
#!/bin/bash
# Copy history to file history
#cd /media/saleel_almajd/Study/linux/my_scripts/
echo "start Copy history to /media/saleel_almajd/Study/linux/my_scripts/history.txt"
export HISTTIMEFORMAT='%F %T ' #to make history and date apear
我用linux bash编写了一个简单的脚本,就像下面这样:
#!/bin/bash
PATH=/tmp_with_zip_files
FILETYPE=zip
i=1
for filename in $PATH/*.$FILETYPE;
do
echo "rm $filename";
if [ -f $filename ];
then rm $filename;
fi
i=$((i+1))
done
echo "$i files removed"
但是,当