Alias 执行代码而不是创建别名

Alias executes code instead of creating alias

在我的 ~/.bashrc 文件中,我定义了以下别名: alias bwapp=service apache2 start;service mysql start;firefox http://localhost/bWAPP/bWAPP/portal.php

然后我重新启动了计算机并启动了终端,期望能够 运行 bwapp 并启动​​门户,但我却收到了:

bash: alias: apache2: not found
bash: alias: start: not found
bash: service: command not found
Reading profile /etc/firejail/firefox.profile
Reading profile /etc/firejail/firefox-common.profile
Reading profile /etc/firejail/disable-common.inc
Reading profile /etc/firejail/disable-devel.inc
Reading profile /etc/firejail/disable-interpreters.inc
Reading profile /etc/firejail/disable-programs.inc
Reading profile /etc/firejail/whitelist-common.inc
Reading profile /etc/firejail/whitelist-var-common.inc
Parent pid 2913, child pid 2914
Warning: skipping pango for private /etc
Warning: skipping asound.conf for private /etc
Warning: skipping pki for private /etc
Warning: skipping crypto-policies for private /etc
Warning fcopy: skipping /etc/alternatives/fakeroot.sv.1.gz, cannot find inode
Warning fcopy: skipping /etc/alternatives/faked.sv.1.gz, cannot find inode
Private /etc installed in 95.44 ms
Post-exec seccomp protector enabled
Seccomp list in: @clock,@cpu-emulation,@debug,@module,@obsolete,@raw-io,@reboot,@resources,@swap,acct,add_key,bpf,fanotify_init,io_cancel,io_destroy,io_getevents,io_setup,io_submit,ioprio_set,kcmp,keyctl,mount,name_to_handle_at,nfsservctl,ni_syscall,open_by_handle_at,personality,pivot_root,process_vm_readv,ptrace,remap_file_pages,request_key,setdomainname,sethostname,syslog,umount,umount2,userfaultfd,vhangup,vmsplice, check list: @default-keep, prelist: adjtimex,clock_adjtime,clock_settime,settimeofday,modify_ldt,lookup_dcookie,perf_event_open,process_vm_writev,delete_module,finit_module,init_module,_sysctl,afs_syscall,create_module,get_kernel_syms,getpmsg,putpmsg,query_module,security,sysfs,tuxcall,uselib,ustat,vserver,ioperm,iopl,kexec_load,kexec_file_load,reboot,set_mempolicy,migrate_pages,move_pages,mbind,swapon,swapoff,acct,add_key,bpf,fanotify_init,io_cancel,io_destroy,io_getevents,io_setup,io_submit,ioprio_set,kcmp,keyctl,mount,name_to_handle_at,nfsservctl,open_by_handle_at,personality,pivot_root,process_vm_readv,ptrace,remap_file_pages,request_key,setdomainname,sethostname,syslog,umount2,userfaultfd,vhangup,vmsplice,
Child process initialized in 366.92 ms

Parent is shutting down, bye...

如果别名包含空格、分号、竖线等,则必须用引号引起来,例如:

alias ls='ls --color'

如果你不引用它 (alias ls=ls --color),它将在空格处中断,所以 alias 将创建一个别名 ls=ls,然后尝试查找一个名为--color,它不存在,所以你得到 bash: alias: --color: not found.

在您的情况下,别名还包含未加引号的分号,它结束当前命令,因此 service ... 给出 bash: service: command not found 并且 firefox ... 给出其余输出。

但最终这应该是一个函数或脚本而不是别名。参见 Unix 上的 In Bash, when to alias, when to script, and when to write a function? 和 Linux。我个人会使用脚本:

#!/bin/bash

service apache2 start
service mysql start
firefox http://localhost/bWAPP/bWAPP/portal.php