当程序在mac上运行时,我想将gnu-date gdate
别名为date
#!/bin/bash
if [[ $(uname) -eq 'Darwin' ]]; then
alias date="gdate"
echo 'you are on a mac!'
type date
fi
# rest of the program
鉴于此代码,如果我直接在终端上运行int,则打印:
you are on a mac!
date is an alias for gdate
但是如果我在print中运行脚本本身就像./test.sh
那样:
you are on a mac!
date is /bin/date
为什么没有从脚本中应用别名?
答案 0 :(得分:6)
默认情况下,别名不会在非交互式shell中展开。改为使用函数。
if [[ $(name) -eq Darwin ]]; then
date () { gdate "$@"; }
echo 'you are on a mac!'
type date
fi
答案 1 :(得分:2)
在许多情况下,使用函数是正确的解决方案。只要您有基于功能的解决方案,就可以这样做。
但是,有一些功能你无法做到,最明显的是与修改调用上下文的位置参数有关,你可以通过启用相应的选项强制在shell脚本中进行别名扩展:
<Grid Height="20" HorizontalAlignment="Left" Background="MediumPurple">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="20" MinWidth="20"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" HorizontalAlignment="Stretch" x:Name="TestTitle"
TextTrimming="CharacterEllipsis" FontSize="16"/>
<Ellipse Width="20" Height="20" Fill="Red" Grid.Column="1" HorizontalAlignment="Left"/>
</Grid>
您必须了解并控制脚本中存在的别名,以避免意外行为。