내가 할 수 있는 데 사용할 수 있는 앨리어스를 히셸 ([태그: csh]) 는 매개변수입니다. 당시 이 같은 일이 표기법
alias junk="mv \\!* ~/.Trash"
이 일을 bash, 그렇지 않은 것 같다. 배시 (bash) 는 여러 가지 유용한 기능을 갖고 있는 점을 감안할 때, 꼭 이래야겠어요 solaris. 이 번호요 구현되어 있습니다 하지만 나는 어떻게 궁금합니다.
배시 앨리어스가 직접 언약보다는 동의하십시오 매개변수입니다. 함수 만들어야 합니다.
그러나 '' 앨리어스가 매개변수입니다 함수를 호출할 수 앨리어스를 마찬가지로 인정하지 않았다. 예를 들면 다음과 같습니다.
myfunction() {
#do things with parameters like $1 such as
mv "$1" "$1.bak"
cp "$2" "$1"
}
myfunction old.conf new.conf #calls `myfunction`
그나저나, 배시 이바시르 '와' 에 정의된 기능을 사용할 수 있는 파일 내의 다른 명령으로 쉘입니다. 그래서 예를 들어 이 같은 이전 함수를 호출할 수 있습니다.
$ myfunction original.conf my.conf
위와 같은 구문을 구체화합니다 답을 얻을 수 있으며, 이는 보다 편리하게 사용할 수 있지만 1 호선 앨리어스가 ad hoc redefinitions 셸에 또는 이바시르 파일:
bash$ myfunction() { mv "$1" "$1.bak" && cp -i "$2" "$1"; }
bash$ myfunction original.conf my.conf
csh% alias junk="mv \\!* ~/.Trash"
bash$ junk() { mv "$@" ~/.Trash/; }
또는:
bash$ junk() { for item in "$@" ; do echo "Trashing: $item" ; mv "$item" ~/.Trash/; done; }
문제는 단순히 질문과대답 빗나갔다. 너 때문에 발생하는 매개변수입니다 '그냥' t make 앨리어스를 don& # 39, 두 번째 이름을 앨리어스가 자도으로 생각하신거야 이미 있습니다. Op 한다 '는' 기능을 ᄎ만들려면 새로운 기능을 지원한다. 이 함수는 함수 이름을 따라 이미 앨리어스가 필요가 없습니다.
이 같은 일이 운영까지도 생각한다.
function trash() { mv "$@" ~/.Trash; }
해당 기능을 사용할 수 있는 것보다 훨씬 더 쉽고 판독값 앨리어스를 동일팔레트에 인수만 중간에서 함장님이요
$ wrap_args() { echo "before $@ after"; }
$ wrap_args 1 2 3
before 1 2 3 after
$ alias speak=echo
$ speak hello world
hello world
불가능한 일을 박스 관리 같은 번거로운 작업에 필요한 경우, 된장, s # 39 here& 제한 및 사람들은 말한다. 그냥 내 탓은 don& # 39, t 가 다루는 그을음, 당신의 인쇄면 motor1.1end 백업하도록 머리는요 경우 기진 맥진 매드 사이언티스트 스타일.
해결 방법은 '합격' 앨리어스가 주장은 래퍼 삽입할 수 있는 가운데 딱 들어맞는다 끝나면 그 다음 명령을 실행하기.
$ alias wrap_args='f(){ echo before "$@" after; unset -f f; }; f'
$ wrap_args x y z
before x y z after
$ $ @ 굈 '수 있습니다' 을 (를) '1' 경우에만 로렌아줌마가 첫 번째 인수.
이렇게 하면, 이는 'f' 임시 함수은 합격한 인수 (참고로, 'f' 호출됨 끝으로). 이 같은 기능을 수행하기 전에 실행되기 때문에 - f '정의' 절감뿐만 앨리어스가 doesn& # 39, t 멈춤으로 수립하였습니다 된다.
서브셸 사용할 수도 있습니다.
$ alias wrap_args='sh -c '\''echo before "$@" after'\'' _'
은 다음과 같은 명령을 앨리어스를
sh -c 'echo before "$@" after' _
의견:
sh - c & # 39, 에코 사용했습니다. $0" "; 인쇄: & # 39$ @" ";; 술 취한 떠드는 소리 공간. 알코올 인쇄: 술에 취해 떠드는 소리
c $ sh, 에코 " 사용했습니다. 0 달러 인쇄: $ @". 술 취한 떠드는 소리 공간. - bash 인쇄:
이 값은 $ $ @ # 39 의 대화형 shell& '0' 와 '' 이 'sh' 를 인용해 재장착하여 연산뿐 꽂으십시오 전에 통과되는. # 39 의 here& 대비성:
에코 ", 공간. 0 달러 인쇄: $ @". 공간. - bash 인쇄:
이 작은 따옴표 이러한 변수를 않습니다를 대화형 문자 그대로 해석할 수 있도록 'sh' - c 셸, 그리고 전달됩니다.
\ '와' 큰따옴표 사용할 수 있지만, best practice 는 $ @ 쿼트에 너회의 인수 (그대로 공백이 포함될 수 있습니다) 및 ',' 추악한 모습을 도움이 될 수 있지만, 심지어 $ @\" \"\ 승리하셨습니다 오버클로킹된 난독화 행사 creditbank. 엔트리여야 기진 맥진 머리는요 반드시 필요합니다.
1, [표시자가] 대안 솔루션으로 사용할 수 있는 도구를 만들 수 있는 # 39, ve I& 최근 " bookmark"; 쉽고 템플릿일 http://support. 명령을 명령 위에 커서 위치 표시기:
내가 찾은 # 39 m, 시간, I& 있는 대부분의 기능을 쓸 수 없는, 그래서 자주 사용하는 명령을 사용하여 쉘로 don& # 39 에서 다시 명령줄이. 이 기능을 추가, 새로운 용어를 사용하여 이 호관련 览侩 荤례 내 명령을 기억할 필요가 있는 실제 명령 어휘 및 함수 인자 () 는 다음과 같은 뜻이 있다. 표시자가 정신적 부담을 줄일 수 있는 것입니다.
#Utility required by all below functions.
#https://stackoverflow.com/questions/369758/how-to-trim-whitespace-from-bash-variable#comment21953456_3232433
alias trim="sed -e 's/^[[:space:]]*//g' -e 's/[[:space:]]*\$//g'"
.
:<<COMMENT
Alias function for recursive deletion, with are-you-sure prompt.
Example:
srf /home/myusername/django_files/rest_tutorial/rest_venv/
Parameter is required, and must be at least one non-whitespace character.
Short description: Stored in SRF_DESC
With the following setting, this is *not* added to the history:
export HISTIGNORE="*rm -r*:srf *"
- https://superuser.com/questions/232885/can-you-share-wisdom-on-using-histignore-in-bash
See:
- y/n prompt: https://stackoverflow.com/a/3232082/2736496
- Alias w/param: https://stackoverflow.com/a/7131683/2736496
COMMENT
#SRF_DESC: For "aliaf" command (with an 'f'). Must end with a newline.
SRF_DESC="srf [path]: Recursive deletion, with y/n prompt\n"
srf() {
#Exit if no parameter is provided (if it's the empty string)
param=$(echo "$1" | trim)
echo "$param"
if [ -z "$param" ] #http://tldp.org/LDP/abs/html/comparison-ops.html
then
echo "Required parameter missing. Cancelled"; return
fi
#Actual line-breaks required in order to expand the variable.
#- https://stackoverflow.com/a/4296147/2736496
read -r -p "About to
sudo rm -rf \"$param\"
Are you sure? [y/N] " response
response=${response,,} # tolower
if [[ $response =~ ^(yes|y)$ ]]
then
sudo rm -rf "$param"
else
echo "Cancelled."
fi
}
.
:<<COMMENT
Delete item from history based on its line number. No prompt.
Short description: Stored in HX_DESC
Examples
hx 112
hx 3
See:
- https://unix.stackexchange.com/questions/57924/how-to-delete-commands-in-history-matching-a-given-string
COMMENT
#HX_DESC: For "aliaf" command (with an 'f'). Must end with a newline.
HX_DESC="hx [linenum]: Delete history item at line number\n"
hx() {
history -d "$1"
}
.
:<<COMMENT
Deletes all lines from the history that match a search string, with a
prompt. The history file is then reloaded into memory.
Short description: Stored in HXF_DESC
Examples
hxf "rm -rf"
hxf ^source
Parameter is required, and must be at least one non-whitespace character.
With the following setting, this is *not* added to the history:
export HISTIGNORE="*hxf *"
- https://superuser.com/questions/232885/can-you-share-wisdom-on-using-histignore-in-bash
See:
- https://unix.stackexchange.com/questions/57924/how-to-delete-commands-in-history-matching-a-given-string
COMMENT
#HXF_DESC: For "aliaf" command (with an 'f'). Must end with a newline.
HXF_DESC="hxf [searchterm]: Delete all history items matching search term, with y/n prompt\n"
hxf() {
#Exit if no parameter is provided (if it's the empty string)
param=$(echo "$1" | trim)
echo "$param"
if [ -z "$param" ] #http://tldp.org/LDP/abs/html/comparison-ops.html
then
echo "Required parameter missing. Cancelled"; return
fi
read -r -p "About to delete all items from history that match \"$param\". Are you sure? [y/N] " response
response=${response,,} # tolower
if [[ $response =~ ^(yes|y)$ ]]
then
#Delete all matched items from the file, and duplicate it to a temp
#location.
grep -v "$param" "$HISTFILE" > /tmp/history
#Clear all items in the current sessions history (in memory). This
#empties out $HISTFILE.
history -c
#Overwrite the actual history file with the temp one.
mv /tmp/history "$HISTFILE"
#Now reload it.
history -r "$HISTFILE" #Alternative: exec bash
else
echo "Cancelled."
fi
}
참조:
NB: # 39 의 경우, 그것은 나쁜 아이디어, 아이디어 isn& t 명백하네 앨리어스를 사용할 수 있는 첫 번째 하나는 & # 39, 결국 앨리어스가 함수은 alias& # 39. # 39, & # 39, 두 번째 하나는 redirect/source&, 읽기 어렵다. 또한 갖고 있다 (어떤 난 돌아보 명백해집니다 있지만 만일의 사태에 대비해 틀렸다니까 혼란스럽다. 나는한다 그 의미가 아니라 실제로 사용할 수 있습니다. 어디든요!)
.
alias foo='__foo() { unset -f $0; echo "arg1 for foo=$1"; }; __foo()'
좋아, 좋은 기능을 사용할 수 있는 경우를 제외하고, 모든 것을 피하고 있다. # 39 의 다양한 기능을 활용할 수 있는 경우 bash& 리디렉션하지 텍스트:
alias bar='cat <<< '\''echo arg1 for bar=$1'\'' | source /dev/stdin'
이들은 모두 같은 길이의 그쯤 대해 몇 자.
실제 이 & # 39 는 시간 차이, , 키커 함수은 method& # 39 위) 이 있다. # 39, & # 39 redirect-source&, 하위 됩니다. 메서드입니다. 이 이론을 증명하기 위해 타이밍 말을 할 수 있다는 판단 때문이다.
arg1 for foo=FOOVALUE
real 0m0.011s user 0m0.004s sys 0m0.008s # <--time spent in foo
real 0m0.000s user 0m0.000s sys 0m0.000s # <--time spent in bar
arg1 for bar=BARVALUE
ubuntu@localhost /usr/bin# time foo FOOVALUE; time bar BARVALUE
arg1 for foo=FOOVALUE
real 0m0.010s user 0m0.004s sys 0m0.004s
real 0m0.000s user 0m0.000s sys 0m0.000s
arg1 for bar=BARVALUE
ubuntu@localhost /usr/bin# time foo FOOVALUE; time bar BARVALUE
arg1 for foo=FOOVALUE
real 0m0.011s user 0m0.000s sys 0m0.012s
real 0m0.000s user 0m0.000s sys 0m0.000s
arg1 for bar=BARVALUE
ubuntu@localhost /usr/bin# time foo FOOVALUE; time bar BARVALUE
arg1 for foo=FOOVALUE
real 0m0.012s user 0m0.004s sys 0m0.004s
real 0m0.000s user 0m0.000s sys 0m0.000s
arg1 for bar=BARVALUE
ubuntu@localhost /usr/bin# time foo FOOVALUE; time bar BARVALUE
arg1 for foo=FOOVALUE
real 0m0.010s user 0m0.008s sys 0m0.004s
real 0m0.000s user 0m0.000s sys 0m0.000s
arg1 for bar=BARVALUE
이 결과, 약 200 은 임의의 간격으로 수행됨 하단 부분. 함수 생성 / 삭제 리디렉션을 보다 더 많은 시간이 걸리는 것으로 보인다. 이를 통해 향후 이 질문에 '을 기대해 본다 (didn& # 39, 혼자 조용히 싶지 않다).
#!/usr/bin/env bash
# you would want to `source` this file, maybe in your .bash_profile?
function runjar_fn(){
java -jar myjar.jar "$@";
}
alias runjar=runjar_fn;
그래서 위의 예에서 모든 매개변수입니다 지나갈 때 나는 '에서' 을 실행하십시오 룬자 앨리어스를.
예를 들어, i did '안녕하세요' 실제로 실행하지 끝날 것이라고 룬자 java - jar 미하리자 '안녕하세요'. 만약 내가 하나 둘 셋 '것' '룬자 아니하였으매 실행하십시오 java - jar 미하리자 하나 둘 셋'.
이 때문에 '$ @' i like it 기반 솔루션은 수행됨 임의의 수의 params.
정당한 이유를 몇 가지 기술적 문제를 해결하는 방법을 시행하십시오 앨리어스가 스맥랜드의 일반 솔루션이므로 bash) 는 임의의 위치변경합니다 없다는 주장. 한 가지 이유는 프로파일링하려는 명령을 실행할 경우 부정적인 영향을 받는 환경 때문에 실행되지 약간만이라도 변경되는지 함수. 경우 다른 모든 기능을 사용해야 합니다.
무엇이 나를 어찌할 수 있는 솔루션을 시도하는 것은 최근 이 정의가 변수 및 일부 약식 명령을 인쇄면이 만들고 싶었다 "고 말한다. 그래서 일부 기능을 이를 위해 썼다. 그러나 일부 변수가 있습니다 어떤 함수 호출 (또는 수도) 에서 변경된 것이다. 살해하였나이다 다음과 같습니다.
펑크나미 BASH_SOURCE BASH_LINENO BASH_ARGC BASH_ARGV
내가 인쇄하려면 데프노스 가변적입니다 (어떤 함수) 의 기본 명령을 사용해 왔습니다. set 명령으로 의해 출력입니다 형식으로 없었다.
sv () { set | grep --color=never -- "^$1=.*"; }
E. g.:
> V=voodoo
sv V
V=voodoo
문제: # 39 위에서 언급한 것처럼, t 이 won& 인쇄인쇄 com/go/4e6b330a_kr 대한 정의가 있는 경우에는, 예를 들어, 현재 컨텍스트로 상호대화식 셸 프롬프트가 (방관하겠나 믿지아니하며 함수 호출), 펑크나미 isn& # 39, t 정의합니다. 하지만 내 함수은 나를 통해 잘못된 정보:
> sv FUNCNAME
FUNCNAME=([0]="sv")
내가 다른 하나의 솔루션으로 그동안 이 주제에 대해 언급한 것은 다른 자리를 마련했습니다. 이를 위해 필요한 인수를 하나, 내가 인쇄하려면 데프노스., 어떤 특정 명령의 가변적입니다 이런게야:
alias asv='(grep -- "^$(cat -)=.*" <(set)) <<<'
이로써 올바른 출력입니다 (없음), 결과 상태 (false):
> asv FUNCNAME
> echo $?
1
하지만 난 아직도 어찌할 방법은 임의의 수의 인수만 해결책을 찾을 수 있는 것 같았다.
# (I put this code in a file "alias-arg.sh"):
# cmd [arg1 ...] – an experimental command that optionally takes args,
# which are printed as "cmd(arg1 ...)"
#
# Also sets global variable "CMD_DONE" to "true".
#
cmd () { echo "cmd($@)"; declare -g CMD_DONE=true; }
# Now set up an alias "ac2" that passes to cmd two arguments placed
# after the alias, but passes them to cmd with their order reversed:
#
# ac2 cmd_arg2 cmd_arg1 – calls "cmd" as: "cmd cmd_arg1 cmd_arg2"
#
alias ac2='
# Set up cmd to be execed after f() finishes:
#
trap '\''cmd "${CMD_ARGV[1]}" "${CMD_ARGV[0]}"'\'' SIGUSR1;
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# (^This is the actually execed command^)
#
# f [arg0 arg1 ...] – acquires args and sets up trap to run cmd:
f () {
declare -ag CMD_ARGV=("$@"); # array to give args to cmd
kill -SIGUSR1 $$; # this causes cmd to be run
trap SIGUSR1; # unset the trap for SIGUSR1
unset CMD_ARGV; # clean up env...
unset f; # incl. this function!
};
f' # Finally, exec f, which will receive the args following "ac2".
E. g.:
> . alias-arg.sh
> ac2 one two
cmd(two one)
>
> # Check to see that command run via trap affects this environment:
> asv CMD_DONE
CMD_DONE=true
그게 단가요 특수 요령 좋은 일을 처리하는 데 사용되는 이 솔루션에 대한 위치 매개 변수 (인수) 를 사용할 수 있는 포착되었습니다 함장님이요 명령의세 작성할 때 유일한 차이점은 어레이입니다 구문 사용해야 합니다.
E. g.,
$ $ {CMD_ARGV @" 확인표시를 ";;). [@]} " " 사용합니다.
상술합니다.
수행을 위한 매개변수입니다, 콩지름에 총괄하였습니다!
그러나 $ @ 프레젠테이션이든 해석되고 실행 중에 앨리어스를 만들 때 달러 대신 앨리어스를 및 탈출이라니요 싫어하겠어 작업 중 하나. 이 문제를 해결할 어떻게 합니까?
대신 이 문제를 없앨 앨리어스를 쉘로 함수를 사용해야 합니다. Foo 다음과 같이 정의할 수 있습니다.
function foo() { /path/to/command "$@" ;}
또는
foo() { /path/to/command "$@" ;}
마지막으로, 다음 구문을 사용하여 foo () 문의:
foo arg1 arg2 argN
'또는' ~ '~ 푸 () 를 추가해야 합니다 /.bash_profile /.zshrc' 절실해졌습니다.
사용할 수 있는 경우, 이
function trash() { mv $@ ~/.Trash; }
다른 두 가지 기능을 모두 활용할 수 있는 이 슬라이드에서는 및 앨리어스를 매개 변수로 있다. 또한 몇 가지 다른 애스펙트에서 지적하고 싶다.
1. 함수은 런입니다 자체 범위, 앨리어스가 공유하여며 유효범위
이 차이를 아는 것이 좋을 수 있습니다 숨긴 또는 노출하는 건 뭔가. 또한 해당 함수가 제안됩니다 최적의 캡슐화.
function tfunc(){
GlobalFromFunc="Global From Func" # Function set global variable by default
local FromFunc="onetwothree from func" # Set a local variable
}
alias talias='local LocalFromAlias="Local from Alias"; GlobalFromAlias="Global From Alias" # Cant hide a variable with local here '
# Test variables set by tfunc
tfunc # call tfunc
echo $GlobalFromFunc # This is visible
echo $LocalFromFunc # This is not visible
# Test variables set by talias
# call talias
talias
echo $GlobalFromAlias # This is invisible
echo $LocalFromAlias # This variable is unset and unusable
출력:
bash-3.2$ # Test variables set by tfunc
bash-3.2$ tfunc # call tfunc
bash-3.2$ echo $GlobalFromFunc # This is visible
Global From Func
bash-3.2$ echo $LocalFromFunc # This is not visible
bash-3.2$ # Test variables set by talias
bash-3.2$ # call talias
bash-3.2$ talias
bash: local: can only be used in a function
bash-3.2$ echo $GlobalFromAlias # This is invisible
Global From Alias
bash-3.2$ echo $LocalFromAlias # This variable is unset and unusable
이 회사는 나를 찾을 수 없다는 것을 여러 차례 상태입니까 앨리어스를 또는 함수은 때 로그인하십시오 '를 통해 ssh' 또는 스위칭이란 관련된 사용자 이름 또는 다중 사용자 환경. 함께 한 가지 요령을 소싱 joyon. 파일 또는 이 흥미로운 함께 별칭: sudo & # 39, & # 39 ',' 앨리어스가 sd = 이 후속 앨리어스가 설치 = & # 39, sd apt 확보하십시오. install& 앨리어스가 비헤이비어는 ',' # 39 로 일하는 작성되지는 (표시문 추가 공간을 sudo & # 39, & # 39 에서 sd = ','). 그러나 이 같은 경우에 비해 래퍼 스크립트입니다 함수 또는 앨리어스입니다 더욱 효과적입니다. 래퍼 스크립트입니다 볼 수 있는 것이 기본 제공하며 / 실행가능파일 고안되었습니다 대한 경로 즉, bin/ / / usr / loca) 의 위치를 비호환성의 function/alias 전에 구입해야 할 수 있다. 예를 들어, 함수 인할지 /.bashrc 배시 '또는' ~ ~ /.bash_profile 동일팔레트에 위한, 나중에는 다른 쉘로 전환하십시오 (즉, '츠시') 그 기능을 더 이상 보이지 않습니다. 그래서 항상 의심스러운 때 래퍼 스크립트입니다 가장 안전하고 이동형이든지 솔루션입니다.
그 해답은 이미 충분히 따라 거의 항상 기능은 이 쿼트에 의해 확정 및 충스러웠으니 맨페이지를 했다. 거의 모든 목적을 위해 " 앨래어스는 우선됨 셸이 functions." ;
이 때문에 완전성을 위해 및 수 있다는 점에 주의해야 할 때 유용하게 사용할 수 있습니다 (조금만 더 가벼운 구문) &prs. %hsmb 앨리어스를 준수하십시오 계속 사용할 수 있습니다 (이 문제를 해결할 수 있지만, s, t # 39 wouldn& OP& # 39 요구 사항). 이것은 아마도 입증할 수 있는 가장 손쉬운 예:
alias ssh_disc='ssh -O stop'
같은 날 수 있는 ',' 가 예상대로 확장됨 ssh_disc myhost 떨어지게 입력할 수 있다. ssh - O 정지점을 myhost ''
이 복잡한 인수만 디스크입니다. 시행하십시오 명령의세 유용할 수 있습니다 (isn& # 39 더 이상 사용할 수 없다, 내 기억 t what it.)