하나의 인수에 대해 두 개의 명령 실행(스크립팅 없음)

하나의 인수에 대해 두 개의 명령 실행(스크립팅 없음)

해당 입력을 두 번 입력하지 않고 하나의 입력에서 두 개의 명령을 어떻게 수행할 수 있습니까?

예를 들어, stat 명령은 파일에 대해 많은 정보를 제공하지만 파일 유형은 나타내지 않습니다.

stat fileName

file 명령은 파일 유형을 알려줍니다.

file fileName

다음과 같이 한 줄로 이 작업을 수행할 수 있습니다.

stat fileName ; file fileName

그러나 fileName을 두 번 입력해야 합니다.

입력이나 입력 변수를 두 번 입력하지 않고 동일한 입력에서 두 명령을 어떻게 실행할 수 있습니까?

Linux에서는 출력을 파이프하는 방법을 알고 있지만 입력은 어떻게 파이프합니까?

답변1

아마도 이것을 위해 내 손가락 관절을 두들겨 패게 될 것입니다. 여기에 트릭을 수행하는 것으로 보이는 bash 버팀대 확장과 평가의 해키 조합이 있습니다.

eval {stat,file}" fileName;"

답변2

를 사용하면 zsh익명 함수를 사용할 수 있습니다.

(){stat $1; file $1} filename

람다 사용 es:

@{stat $1; file $1} filename

다음을 수행할 수도 있습니다.

{ stat -; file -;} < filename

( 액세스 시간이 업데이트되므로 stat첫 번째 작업을 수행합니다).file

나는 할 것이다:

f=filename; stat "$f"; file "$f"

하지만 그것이 변수의 목적입니다.

답변3

또 다른 방법은 다음과 같습니다.

$ stat filename && file "$_"

예:

$ stat /usr/bin/yum && file "$_"
  File: ‘/usr/bin/yum’
  Size: 801         Blocks: 8          IO Block: 4096   regular file
Device: 804h/2052d  Inode: 1189124     Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:rpm_exec_t:s0
Access: 2014-06-11 22:55:53.783586098 +0700
Modify: 2014-05-22 16:49:35.000000000 +0700
Change: 2014-06-11 19:15:30.047017844 +0700
 Birth: -
/usr/bin/yum: Python script, ASCII text executable

이는 bash및 에서 작동합니다 zsh. 이는 에서도 작동 mksh하지만 dash대화형일 때만 작동합니다. AT&T ksh에서는 file "$_"해당 회선이 다른 회선에 있을 때만 작동합니다 stat.

답변4

이 답변은 다른 답변과 유사합니다.

통계파일 이름  && 파일 !#:1

자동으로 반복되는 다른 답변과 달리마지막이전 명령의 인수를 사용하려면 다음을 계산해야 합니다.

ls -ld파일 이름  && 파일 !#:2

다른 답변과 달리 따옴표가 필요하지 않습니다.

stat "useless cat"  &&  file !#:1

또는

echo Sometimes a '$cigar' is just a !#:3.

관련 정보