alias bp="cat $@ > $@.BACK"
Run Code Online (Sandbox Code Playgroud)
我的第二个想法是:
alias bp="cp $@{,.BACK}"
Run Code Online (Sandbox Code Playgroud)
所以我想要一个备份文件的命令.它不会引发任何错误,但它根本不起作用.
我知道有些命令可以通过shell进行别名,例如
alias mv="cp"
Run Code Online (Sandbox Code Playgroud)
但我想做一些类似但有争议的事情(是的,我已经看到了另一个问题,但我的问题略有不同).类似的东西:
sshkill() {
service sshd restart
}
alias sshkill="killall sshd"
Run Code Online (Sandbox Code Playgroud)
但这显然不起作用.
我希望阻止用户直接杀死sshd(至少是偶然)并使其重新启动(这适用于多次发生这种情况的服务器).那么,有没有办法阻止执行命令而不是执行别名?killall sshd
service sshd restart
如果我想在一行中创建一个目录并将目录更改为所有目录,我可以执行以下操作:
mkdir dir_name && cd $_
我怎样才能做同样的事情git clone
?
命令 ,git clone repo_url && cd $_
显然不起作用,因为没有这样的目录repo_url
. 但是有可能在一行中完成吗?
我正在提供一些服务,并且我有一个 setup.sh 文件,必须第一次(或更新时)执行该文件。该脚本应该创建某种别名,可以从该终端或新终端访问该别名(也在系统重新启动后)。该别名应指向另一个可执行 sh 文件。
setup.sh 文件:
#!/bin/bash
alias customservice='./customservice.sh "$@"'
Run Code Online (Sandbox Code Playgroud)
如您所见,此 customservice.sh 脚本已准备好接受多个参数。使用这个自定义服务别名,我想像这样调用这个脚本:
customservice //显示帮助
customservice启动
customservice停止
customservice exec bash
...
我的 customservice.sh 文件:
if [ $# -eq 1 ] && [ $1 = "start" ]; then
//do something
elif [ $# -eq 1 ] && [ $1 = "stop" ]; then
//do something
elif [ $# > 1 ] && [ $1 = "exec" ]; then
//do stuff with ${@:2}
else
echo "help"
fi
Run Code Online (Sandbox Code Playgroud)
也许 customscript Kill 命令也不错。它应该完全删除这个别名。 …
作为一个天真的菜鸟,我创建了几个用于接受参数的bash别名,它们完全按照预期工作.然而,我试图制作更多这样的别名,但这些不会按预期工作.
这个问题导致我在这里,我了解到bash别名不接受参数.相反,您必须创建一个函数.例如,请看这里或这里.
因此,假设"bash别名不接受论证"共识是正确的,为什么所有这些都有效?
alias pacss='pacman -Ss '
alias pacs='sudo pacman -S '
alias yausnc='yaourt -S --noconfirm '
Run Code Online (Sandbox Code Playgroud)
当我说这些"工作"时,我的意思是,例如,输入'pacs package'会提示我输入密码,提示确认,然后检索和安装包.
那么,为什么这些别名有效呢?他们接受的术语在技术上不是"论据"吗?这是Arch(或Manjaro,我正在使用)的特质吗?时空连续体中的一个洞?
任何澄清应予以赞赏.
编辑:谢谢你的答案解释这些不是要求争论.我不太明白我的第一个例子与以下尝试的别名有何不同,后者不起作用:
alias lping='ping 192.168.1.'
Run Code Online (Sandbox Code Playgroud)
这会失败,因为ping执行时没有附加数字I类型.我的意图是能够输入例如lping 123并让bash执行"ping 192.168.1.123",而是说"未知主机192.168.1".
我经常使用命令:
ack searchexpre -l --print0 | xargs -0 -n 1 sed -i -e sedexpression
Run Code Online (Sandbox Code Playgroud)
我想创建一个别名,如:
searchandreplace searchexpre sedexpression
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
我有一个命令
\nlsof -i :3000\n
Run Code Online (Sandbox Code Playgroud)\n当我运行它时,我得到了这个
\n\xe2\x9a\xa1\xef\xb8\x8flsof -i :3000 \nCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME \nnode 6803 bheng 13u IPv6 0xa757c4ba1a0bf589 0t0 TCP *:hbci (LISTEN) \n
Run Code Online (Sandbox Code Playgroud)\n我想创建此命令的别名,该别名采用参数作为我的端口号。
\n我不想为此创建一个函数或任何东西。
\nalias checkport='lsof -i :$1'
我想像这样使用它
\ncheckport 3000\n
Run Code Online (Sandbox Code Playgroud)\n\xe2\x9a\xa1\xef\xb8\x8fcheckport 3000 \nlsof: unacceptable port specification in: -i : \nlsof 4.89 \n latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ \n latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ \n latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man \n usage: [-?abhlnNoOPRtUvV] [+|-c …
Run Code Online (Sandbox Code Playgroud) 如何创建带有参数的别名并将其插入到文件扩展名中以创建它?我厌倦了这个,但这不起作用:
alias create-bash-file=' echo "#!/bin/bash" > "$1.sh" '
Run Code Online (Sandbox Code Playgroud)
因为 $1 是第一个参数,.sh 是文件扩展名,我想创建一个别名来创建包含“#!/bin/bash”的 bash 文件,但文件名我想将其作为参数,例如,我将写入 create-bash-file filename 这应该生成名为 filename.sh 的 bash 文件
我想要一个产生以下结果的别名:
$cd /home/ok
[clear screen]
/home/ok
total 452K
-rwx--x--x 1 user gigl 16K Oct 1 14:08 ok0
drwx------ 5 user gigl 0 Oct 1 14:02 ok1
drwx------ 5 user gigl 0 Oct 1 13:59 ok2
drwx------ 9 user gigl 0 Oct 1 14:01 ok3
-rw------- 1 user gigl 32 Sep 30 14:36 ok4
Run Code Online (Sandbox Code Playgroud)
我做了一个类似的剧本
$cat ~/.cd.sh
#!/bin/bash
cd $1 && clear && pwd && ls -lh --color=auto
Run Code Online (Sandbox Code Playgroud)
但它不会改变当前的目录.这可能是因为在脚本中它会改变目录但是当它回到bash时我回到了目录中我执行了脚本.
任何的想法 ?
谢谢,从答案中我得到了类似的工作:
alias ls="clear && pwd && ls -lh --color=auto"
cd() …
Run Code Online (Sandbox Code Playgroud)