将命令echo替换为";回声-e“;在linux上
我有一个shell程序,它的内容如下将命令echo替换为";回声-e“;在linux上,linux,shell,echo,alias,subshell,Linux,Shell,Echo,Alias,Subshell,我有一个shell程序,它的内容如下 !#/bin/bash echo \\n program 一旦我在Linux以外的平台上运行这个程序,它就会识别这个特殊字符,并以 (newline) program 当相同的程序在Linux上运行时,echo命令需要“-e”选项。 现在我不想在我的文件中显式地用“echo-e”更改每次出现的echo,因为这样会在其他平台上产生问题。所以我想做一个条件编译,比如 set SYSTEM="uname -s" #if ($SYSTEM == Linux)
!#/bin/bash
echo \\n program
一旦我在Linux以外的平台上运行这个程序,它就会识别这个特殊字符,并以
(newline)
program
当相同的程序在Linux上运行时,echo命令需要“-e”选项。
现在我不想在我的文件中显式地用“echo-e”更改每次出现的echo,因为这样会在其他平台上产生问题。所以我想做一个条件编译,比如
set SYSTEM="uname -s"
#if ($SYSTEM == Linux)
set echo="echo -e"
#endif
但这不起作用,因为使用set或export命令,我需要用$echo替换所有出现的echo,我不想这样做。
同样,设置别名并不能解决这个问题,因为即使在子shell中,我也需要用“echo-e”替换echo
是否有其他方法可以仅在Linux平台上用“echo-e”替换echo?结合使用以下功能:
bash-3.2$ export BASH_ENV=$HOME/always-source
bash-3.2$ cat $HOME/always-source
echo() {
command echo -e "$@"
}
bash-3.2$ cat runme.bash
#!/bin/bash
echo "\nHello World $1\n"
if [[ -z $1 ]]; then
$0 child
fi
和一个调用:
bash-3.2$ ./runme.bash
Hello World
Hello World child
在bash测试(linux和mac os x)中包装此测试:
我相信你在找一个化名 bash中的语法是
alias echo='echo-e'
我知道您不想更改echo调用,但是您如何考虑使用echo$'\nhello\n'
而不是echo-e
?在shell中定义别名:
alias echo="echo -e";
然后为您的脚本编写源代码:
source ./<script1>
源代码/
这样,脚本就不会创建子shell并使用父shell的变量。此外,即使在脚本终止后,脚本中定义的变量也将存在
要调用script1.sh中的其他脚本,请使用源代码:
source ./<script2>
源代码/
您将此命令放在某个脚本中,并尝试在子shell中运行它,它将不起作用。通过将其添加到.bashrc
中,它将在所有bash
脚本中进行源代码转换。它将仅在新shell中进行源代码转换,而不是在子shell中进行源代码转换。我已将答案更改为使用bash_ENV
和函数,而不是别名(在非交互式环境中似乎不起作用)切换到使用<代码> PROTFF <代码>可移植性吗?你有BASH脚本吗?或者你真的有一个SH脚本?如果你确定它总是BASH,ECHO是一个构建器,它可以被配置成在所有系统上工作相同的方式。如果它也可以由其他shell运行,请考虑WrkkKon的评论中的<代码> Prtff<代码>。nvoke other脚本再次使用echo命令。Thnx Upasna,我知道这一点,也知道其他一些方法,但我想用条件编译的方法来解决这个问题。@Manish但你不能把别名放在条件中吗?@trialent这不是别名,我在条件中使用set命令。它们应该是。子shell与其他任何子shell完全一样shell@gbtimmon…那么请尝试一下。
source ./<script2>