bash에서 임의의 shuf 결과로 명령을 실행하십시오.


0

bash에서 프로그래밍을 처음 사용했습니다. 명령 목록에서 임의로 선택하고 특정 명령을 실행하는 쉘 명령을 작성하려고합니다.

이것이 내가 가진 것입니다 :

#! /bin/bash
shuf -e command-1 command-2 command-3 command-4 -n 1

case $-n in

  command-1

cp -r /home/mark/Desktop/PlaylistA/ac.mp3 /home/mark/Desktop/PlaylistSongs/
  ;;

  command-2

cp -r /home/mark/Desktop/PlaylistB/ac.mp3 /home/mark/Desktop/PlaylistSongs/
  ;;

  command-3

cp -r /home/mark/Desktop/PlaylistC/ac.mp3 /home/mark/Desktop/PlaylistSongs/
  ;;

  command-4

cp -r /home/mark/Desktop/PlaylistD/ac.mp3 /home/mark/Desktop/PlaylistSongs/
  ;;

esac

누구나 내 코드를 수정하여 작동 할 수 있습니까? 어떤 도움이라도 대단히 감사하겠습니다.


2
해당 스크립트를 실행하면 실제로 어떻게됩니까? 각 사례마다 닫는 괄호가 없기 때문에 귀하의 사례 진술이 잘못되었습니다. 또한 변수는 아닐 수 있습니다 $-n. 현재 셔플 명령의 값을 어디에서나 저장하는 것처럼 보이지 않습니다.
Seth

실제로 파일 이름 만 그려야 cp하고 변수에 해당 파일 이름이 있는 단일 명령을 사용해야 합니다. 그리고 파일을 그리려면 sort해당 -R매개 변수 (임의 정렬) 와 함께 명령을 사용할 수 있습니다 file="$(ls */*.mp3 | sort -R | head -1)".
xenoid

답변:


0

해당 스크립트의 구문이 올바르지 않지만 쉽게 수정할 수 있습니다.

#!/bin/bash

cmd=$(shuf -e command-1 command-2 command-3 command-4 -n 1)

target_dir=/home/mark/Desktop/PlaylistSongs

case $cmd in
command-1) cp /home/mark/Desktop/PlaylistA/ac.mp3 "$target_dir/" ;;
command-2) cp /home/mark/Desktop/PlaylistB/ac.mp3 "$target_dir/" ;;
command-3) cp /home/mark/Desktop/PlaylistC/ac.mp3 "$target_dir/" ;;
command-4) cp /home/mark/Desktop/PlaylistD/ac.mp3 "$target_dir/" ;;
esac

그 동안 나는 다른 개선을했습니다.

  • 반복하지 마십시오 : 공통 대상 디렉토리를 변수로 추출하십시오.
  • 단일 파일을 복사하는 -r플래그가 필요하지 않습니다.cp

이것은 단순히 와우입니다. 고마워 고마워 토론토에 계시다면 알려주세요. 맥주가 저에게 있습니다!
Mark

내가 거기에 도착하면 토론토의 @Mark 맥주는 좋은 소리. 당신은 또한 대답을 수락 표시 할 수 있다면 그것은 대단 할 것입니다.
janos

야노스, 느리게 응답해서 죄송합니다. 답변을 수락 된 것으로 표시 할 위치를 찾을 수 없습니다.
Mark

@Mark 내 답변 옆에 투표 할 위 / 아래 화살표가 있습니까? 바로 아래에 확인 표시가 있습니다
janos

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.