【问题标题】:Alias executes code instead of creating aliasAlias 执行代码而不是创建别名
【发布时间】:2019-09-16 22:05:51
【问题描述】:

在我的 ~/.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...

【问题讨论】:

  • 您需要在等号后的文本周围添加引号以将其标记为字符串。
  • 感谢您的澄清

标签: bash terminal alias


【解决方案1】:

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

alias ls='ls --color'

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

在您的情况下,别名还包含不带引号的分号,它们结束当前命令,因此service ... 给出bash: service: command not foundfirefox ... 给出其余的输出。

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

#!/bin/bash

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

【讨论】:

  • 严格来说,不必引用整个body。 alias ls=ls\ --color 就足够了,尽管引用整个正文使其更具可读性。
  • @chepner 感谢您指出这一点。我已经编辑澄清。
猜你喜欢
  • 1970-01-01
  • 2016-01-29
  • 2011-06-09
  • 2011-07-05
  • 2017-01-24
  • 1970-01-01
  • 2021-07-02
相关资源
最近更新 更多