为什么这个别名在 .bash_profile 脚本中不起作用?
Why does this alias not work in .bash_profile script?
我正在尝试在我的 Mac OSX 上为 Chromium
写一个 bash 别名。它在不在 bash 别名脚本中时有效,但在我尝试创建别名时无效。
我在我的终端中尝试了这些命令,一个接一个:
cd /Applications/Chromium.app/Contents/MacOS/
./Chromium --pro-server="socks5://localhost:1234
cd -
然后,我尝试将这些全部放入我的 .bash_profile
脚本中的一个别名命令中:
alias launch_chromium='cd /Applications/Chromium.app/Contents/MacOS/; ./Chromium --pro-server="socks5://localhost:1234" ; cd -'
现在,当我像这样启动 bash 时:bash --login
,我得到
unexpected EOF while looking for matching `''
而且,当我将别名命令中的确切内容复制并粘贴到终端时,它起作用了 perfectly:L
cd /Applications/Chromium.app/Contents/MacOS/; ./Chromium --pro-server="socks5://localhost:1234" ; cd -
我做错了什么?
您问题中发布的别名定义没有解释您的症状 - 它应该有效。
但是,使用 shell 函数 而不是别名可以更好地解决您的问题:
launch_chromium() (
cd /Applications/Chromium.app/Contents/MacOS/
exec ./Chromium --pro-server="socks5://localhost:1234" "$@"
)
注意方法:
( ... )
用于封装函数体,导致它在subshell中运行 ,这就不需要 return 到以前的工作目录。
exec
用于提高效率:它 将 subshell 替换为 Chromium 进程,因为 subshell 然后就不再需要了。为这一点和下一点向 Charles Duffy 致敬。
附加 "$@"
以传递潜在参数。
使用函数有两个重要的优点:
调用它是一个单个命令,而您的别名包含多个命令,这会导致意外行为例如管道。
函数可以接受 参数 - 不同于别名。
实际上不需要更改工作目录。
alias launch_chromium='/Applications/Chromium.app/Contents/MacOS/Chromium --pro-server="socks5://localhost:1234"'
我正在尝试在我的 Mac OSX 上为 Chromium
写一个 bash 别名。它在不在 bash 别名脚本中时有效,但在我尝试创建别名时无效。
我在我的终端中尝试了这些命令,一个接一个:
cd /Applications/Chromium.app/Contents/MacOS/
./Chromium --pro-server="socks5://localhost:1234
cd -
然后,我尝试将这些全部放入我的 .bash_profile
脚本中的一个别名命令中:
alias launch_chromium='cd /Applications/Chromium.app/Contents/MacOS/; ./Chromium --pro-server="socks5://localhost:1234" ; cd -'
现在,当我像这样启动 bash 时:bash --login
,我得到
unexpected EOF while looking for matching `''
而且,当我将别名命令中的确切内容复制并粘贴到终端时,它起作用了 perfectly:L
cd /Applications/Chromium.app/Contents/MacOS/; ./Chromium --pro-server="socks5://localhost:1234" ; cd -
我做错了什么?
您问题中发布的别名定义没有解释您的症状 - 它应该有效。
但是,使用 shell 函数 而不是别名可以更好地解决您的问题:
launch_chromium() (
cd /Applications/Chromium.app/Contents/MacOS/
exec ./Chromium --pro-server="socks5://localhost:1234" "$@"
)
注意方法:
( ... )
用于封装函数体,导致它在subshell中运行 ,这就不需要 return 到以前的工作目录。exec
用于提高效率:它 将 subshell 替换为 Chromium 进程,因为 subshell 然后就不再需要了。为这一点和下一点向 Charles Duffy 致敬。
附加 "$@"
以传递潜在参数。
使用函数有两个重要的优点:
调用它是一个单个命令,而您的别名包含多个命令,这会导致意外行为例如管道。
函数可以接受 参数 - 不同于别名。
实际上不需要更改工作目录。
alias launch_chromium='/Applications/Chromium.app/Contents/MacOS/Chromium --pro-server="socks5://localhost:1234"'